Linuxhotel Wiki

Wie ging das nochmal?

Benutzer-Werkzeuge

Webseiten-Werkzeuge


lpi1:ssh

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu der Vergleichsansicht

lpi1:ssh [2018/10/11 11:11]
ingo_wichmann [Server Key aus known_hosts entfernen]
lpi1:ssh [2020/04/17 12:42]
Zeile 1: Zeile 1:
-**Todo**: anpassen des Unit-Files bei systemd ((als Default werden alle Prozesse einer proc group bei restart oder stop gekillt. Das ist nicht das, was man bei ssh o.ä. will. 
- 
-Unit-File nach /​etc/​systemd/​system kopieren und KillMode=process rein 
-und das Verhalten ist wie früher. 
- 
-Bei vielen Distris ist das Standard-Unit-File mit 
-KillMode=control-group. D.h. man müsste immer und überall bei jeder 
-ssh-Installation diese Änderung machen, wenn man nicht irgendwann ein 
-doofes Problem haben will)) 
-====== ssh ====== 
-===== Einsatzzwecke von ssh ===== 
-  * Fernadministration 
-  * Dateien übers Netz kopieren 
-  * Tunnel bauen 
- 
-====== Grundfunktionen ====== 
-Einloggen auf <​Rechner>​ mit <​Benutzer>:​ (( Wenn auf dem entfernten Rechner Befehle ausgeführt werden sollen (z.B. Updates einspielen),​ die nicht unterbrochen werden sollen (z.B. von einem Netzwerkproblem),​ dann ist [[screen]] auf dem entfernten Rechner sehr nützlich )) 
-  ssh <​Benutzer>​@<​Rechner>​ 
- 
-hängende ssh-Verbindung beenden: 
-  ~. 
- 
-ssh-Verbindung pausieren: 
-  ~Strg+z 
- 
-Dateien auf andere Rechner kopieren: (( manchmal ist hier auch [[rsync]] oder [[tar#​dateien_kopieren_mit_sudo_tar_und_ssh|tar]] nützlich, besonders wenn sowohl die Quell-Datei als auch das Ziel auf entfernten Rechnern liegen )) 
-  scp <​Datei>​ <​Benutzer>​@<​Rechner>:/<​Verzeichnis>​ 
-Dateien auf andere Rechner ohne lange Pfadangaben ins $HOME-Verzeichnis von <​Benutzer>​ kopieren: 
-  scp <​Datei>​ <​Benutzer>​@<​Rechner>:<​Verzeichnis>​ 
- 
-====== Server Keys ====== 
-===== Fingerprint Hostkey überprüfen ===== 
-  ssh-keygen -l -f /​etc/​ssh/​ssh_host_rsa_key.pub 
- 
-===== Server Key aus known_hosts entfernen ===== 
-Name und IP-Adresse aus known_hosts entfernen: 
- 
-  ssh-keygen -R notebook02 
-  ssh-keygen -R 192.168.1.202 
- 
-===== Server Keys neu erzeugen ===== 
-=== Debian === 
-  rm /​etc/​ssh/​ssh_host_*key* 
-  dpkg-reconfigure openssh-server 
- 
-====== Public-Private-Key Authentifizierung ====== 
-===== Als Nutzer Schlüsselpaar erzeugen ===== 
-Einfach: 
-  ssh-keygen 
-oder für Schlüssel mit Kommentar auf Basis von [[wpde>​Curve25519]] 
-  ssh-keygen -t ed25519 -C "​Kommentar"​ 
- 
-===== Public-Key auf anderen Rechner übertragen ===== 
-  ssh-copy-id -i .ssh/​id_rsa.pub nutzer05@notebook06 
-oder von Hand: 
-  ssh nutzer05@notebook06 'mkdir -m 700 ~/​.ssh'​ 
-  ssh nutzer05@notebook06 'cat >> .ssh/​authorized_keys'​ < ~/​.ssh/​id_rsa.pub 
-  ssh nutzer05@notebook06 'chmod 400 .ssh/​authorized_keys'​ 
- 
-===== Serverseitig Passwortauthentifizierung abschalten ===== 
- 
-<file txt /​etc/​ssh/​sshd_config>​ 
-  UsePAM no 
-  PasswordAuthentication no 
-</​file>​ 
- 
-Alternativ (CentOS 7) 
-<file txt /​etc/​ssh/​sshd_config>​ 
-  UsePAM yes 
-  ChallengeResponseAuthentication no 
-  PasswordAuthentication no 
-</​file>​ 
- 
-===== ssh-agent ===== 
-Schlüssel dem ''​ssh-agent''​ hinzufügen:​ 
-  ssh-add .ssh/id_dsa 
- 
-((Bei openSuSE 11.0 wird der ''​ssh-agent''​ bei der Anmeldung nur gestartet, wenn das Verzeichnis ''​~/​.ssh''​ existiert: 
-  mkdir -m 700 ~/.ssh 
-)) 
- 
-Prüfen, welche Schlüssel der agent kennt: 
-  ssh-add -l 
- 
-===== Nutzer Zugriff beschränken ===== 
-==== mit authorized_keys command ==== 
-//Problem: die Datei ''​~/​.ssh/​authorized_keys''​ gehört dem Nutzer, den man einschränken möchte. // 
- 
-<file txt ~/​.ssh/​authorized_keys>​ 
-command="/​usr/​bin/​who",​no-agent-forwanding,​no-X11-forwarding,​no-port-forwarding ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHBqUtiLsRTLKquoVXKwhrPRD92CzaN9EOkVEfWoHfdC nutzer26@notebook26 
-</​file>​ 
-==== mit Match ==== 
-<file txt /​etc/​ssh/​sshd_config>​ 
- 
-Match User nutzer12 
-  ForceCommand /​usr/​bin/​who 
-</​file>​ 
- 
-====== Fehlersuche ====== 
-  ssh -v nutzer06@notebook06 
-  ssh -vv nutzer06@notebook06 
- 
-====== SSH über mehrere Hops ====== 
-<​file>​ 
-+--------+ ​                 +------------+ ​               +------------+ 
-| ssh    |                  | Hop Server |                | server ​    | 
-| client |  _ _ _ ssh _ _ _ | notebook01 |                | notebook02 | 
-|        | ================ssh========tunnel============>​ |            | 
-+--------+ ​ ̅  ̅  ̅  ̅  ̅  ̅  ̅  ̅  +------------+ ​               +------------+ 
-</​file>​ 
- 
-===== Client ===== 
-centos 7.4, debian 9, ubuntu 18.04: (ab OpenSSH-Version 7.3) 
- 
-  ssh -J notebook01.linuxhotel.de notebook02.linuxhotel.de 
- 
-mit einer ''​~/​.ssh/​config''​ reduziert sich das zu: 
- 
-<file text ~/​.ssh/​config > 
-Host notebook02 
-  Hostname notebook02.linuxhotel.de 
-  ProxyJump notebook01.linuxhotel.de 
-</​file>​ 
- 
-  ssh notebook02 
- 
-Bei älteren SSH-Versionen:​ 
- 
-centos 7, debian 8, ubuntu 16.04: 
- 
-  ssh -o ProxyCommand="​ssh -W %h:%p notebook01.linuxhotel.de"​ notebook02.linuxhotel.de 
- 
-mit einer ''​~/​.ssh/​config''​ reduziert sich das zu: 
- 
-<file text ~/​.ssh/​config > 
-Host notebook02 
-  Hostname notebook02.linuxhotel.de 
-  ProxyCommand ssh -W %h:%p notebook01.linuxhotel.de 
-</​file>​ 
- 
-  ssh notebook02 
- 
-Bei noch älteren SSH-Versionen muss zusätzlich ''​netcat''​ bzw. ''​nc''​ auf dem Jumphost installiert sein: 
- 
-debian 6, centos 6: 
-<file text ~/​.ssh/​config > 
-Host notebook02 
-  Hostname notebook02.linuxhotel.de 
-  ProxyCommand ssh -q notebook01.linuxhotel.de nc %h %p 
-</​file>​ 
- 
-===== Hop Server ===== 
-//​optionale//​ Absicherung,​ damit sich der Benutzer nicht auf dem Hop-Server einloggen kann 
- 
-<file txt /​etc/​ssh/​sshd_config>​ 
-# nutzer02 wird auf notebook02 weitergeleitet:​ 
-Match User nutzer02 
-  ForceCommand ssh nutzer02@notebook02 $SSH_ORIGINAL_COMMAND 
- 
-# nutzer01 wird auf den mit der Option -W gewählten Server weitergeleitet:​ 
-Match User nutzer01 
-  ForceCommand ssh %u@%h $SSH_ORIGINAL_COMMAND 
-</​file>​ 
- 
-===== Agent-Forwarding nutzen ===== 
-  ssh -A notebook17 
-  ssh notebook07 
- 
-besser, mit Konfigdatei:​ 
-<file txt ~/​.ssh/​config>​ 
-Host notebook17 
-  ForwardAgent yes 
-  IdentityFile ~/​.ssh/​id_rsa 
-  IdentitiesOnly yes 
-</​file>​ 
- 
-==== Sicherheitseinschränkung bei Agent-Forwarding ==== 
-Sockets zu den ssh-agents anzeigen: 
-  ls -ld /​tmp/​ssh-*/​agent* 
- 
-root kann den Socket für das Agent-Forwarding mitnutzen: (( Mit eingeschaltetem Agent-Forwarding sollte man nur vertrauenswürdige Server besuchen. root-Benutzer auf dem Server können während die Verbindung besteht den ssh-Agent "​mitbenutzen"​. Dazu sucht root nach  
-  * Prozess-Nummern ( ''​-t''​ ),  
-  * die eine IP-Verbindung geöffnent haben ( ''​-i''​ ), 
-  * deren Namen mit der Zeichenkette ''​sshd''​ beginnt ( ''​-c''​ ), 
-  * und die dem verbundenen Benutzer gehören ( ''​-u''​ )  
-)) 
- 
-  PIDS="​$(lsof -t -a -i -c sshd -u nutzer05)"​ 
- 
-(( Weiter sucht er nach dazu passenden Socket-Dateien ( ''/​tmp/​ssh-*/​agent.$pid''​ ), und speichert eine ( ''​head -n 1''​ ) in der Variablen ''​SSH_AUTH_SOCK''​.)) 
- 
-  export SSH_AUTH_SOCK=$(for pid in $PIDS; do echo /​tmp/​ssh-*/​agent.$pid;​ done | head -n 1) 
- 
-  ssh nutzer05@notebook07 
- 
-Auch ein ssh-agent auf dem client-Rechner kann ähnlich mitgenutzt werden: 
- 
-  PIDS="​$(lsof -t -w -a -U -c /agent/ -u nutzer05)"​ 
- 
-Weitere Diskussion auch: [[https://​heipei.github.io/​2015/​02/​26/​SSH-Agent-Forwarding-considered-harmful/​|diesen Link]] 
- 
-====== SSH Tunnel ====== 
-===== TCP Tunnel ===== 
-Allgemein: 
-  ssh -L <lokaler Port>:<​Zielrechner>:<​Zielport>​ <​Benutzer>​@<​ssh-Server>​ 
- 
-Spezialfall X-Weiterleitung:​ 
-  ssh -X <​Benutzer>​@<​Rechner>​ 
- 
-Dazu muß in der Datei ''/​etc/​ssh/​sshd_config''​ folgender Eintrag vorhanden sein: 
-<​file>​X11Forwarding yes</​file>​ 
- 
-Tunnel Rückwärts:​ 
-  ssh -R <Port auf ssh-Server>:<​Zielrechner>:<​Zielport>​ <​Benutzer>​@<​ssh-Server>​ 
- 
-Dazu muß in der Datei ''/​etc/​ssh/​sshd_config''​ folgender Eintrag vorhanden sein: 
-<​file>​GatewayPorts yes</​file>​ 
- 
-Tunnel nachträglich anlegen: 
-  ~C 
-  help 
-  -L <lokaler Port>:<​Zielrechner>:<​Zielport>​ 
- 
-===== SOCKS Tunnel ===== 
-z.B. für Firefox: 
- 
-  ssh -D 1080 <​Zielrechner>​ 
- 
-===== IP Tunnel / VPN ===== 
-//noch nicht getestet// 
- 
-==== Client ==== 
-  ssh -f -w 0:1 192.168.1.15 true 
-  ifconfig tun0 10.1.1.1 10.1.1.2 netmask 255.255.255.252 
-  route add 10.0.99.0/​24 10.1.1.2 
- 
-==== Server ==== 
-''/​etc/​ssh/​sshd_config''​ : 
-<​file>​ 
-PermitTunnel yes 
-</​file>​ 
-  ifconfig tun1 10.1.1.2 10.1.1.1 netmask 255.255.255.252 
-  route add 10.0.50.0/​24 10.1.1.1 
- 
-====== Links ====== 
-  * [[ http://​www.jfranken.de/​homepages/​johannes/​vortraege/​ssh1_inhalt.de.html | SSH Grundlagen von Johannes Franken ]] 
-  * [[ http://​www.jfranken.de/​homepages/​johannes/​vortraege/​ssh2_inhalt.de.html | SSH Tunnels von Johannes Franken ]] 
-  * [[ http://​www.jfranken.de/​homepages/​johannes/​vortraege/​ssh3_inhalt.de.html | Firewalls durchbohren von Johannes Franken ]] 
-  * [[ http://​www.employees.org/​~satch/​ssh/​faq/​ssh-faq.html | SSH FAQ englisch ]] 
-  * [[ http://​www.openssh.org/​de/​index.html | SSH Homepage deutsch ]] 
  
lpi1/ssh.txt · Zuletzt geändert: 2024/03/01 14:17 (Externe Bearbeitung)