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

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
Nächste Überarbeitung Beide Seiten, nächste Überarbeitung
lpi1:ssh [2015/12/11 11:42]
ingo_wichmann [SSH über mehrere Hops]
lpi1:ssh [2018/10/11 11:14]
ingo_wichmann
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 ====== ====== ssh ======
 ===== Einsatzzwecke von ssh ===== ===== Einsatzzwecke von ssh =====
Zeile 13: Zeile 4:
   * Dateien übers Netz kopieren   * Dateien übers Netz kopieren
   * Tunnel bauen   * Tunnel bauen
- 
-===== Vorteile von ssh ===== 
-  * Sicherheit durch Public-Private Key Verschlüsselung 
-  * Mehrere Benutzer können einen Account gemeinsam Nutzen 
-  * Single Sign On möglich 
  
 ====== Grundfunktionen ====== ====== Grundfunktionen ======
Zeile 29: Zeile 15:
   ~Strg+z   ~Strg+z
  
-Dateien auf andere Rechner kopieren: (( manchmal ist hier auch [[tar#​dateien_kopieren_mit_sudo_tar_und_ssh]] nützlich, besonders wenn sowohl die Quell-Datei als auch das Ziel auf entfernten Rechnern liegen ))+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>​   scp <​Datei>​ <​Benutzer>​@<​Rechner>:/<​Verzeichnis>​
 Dateien auf andere Rechner ohne lange Pfadangaben ins $HOME-Verzeichnis von <​Benutzer>​ kopieren: Dateien auf andere Rechner ohne lange Pfadangaben ins $HOME-Verzeichnis von <​Benutzer>​ kopieren:
   scp <​Datei>​ <​Benutzer>​@<​Rechner>:<​Verzeichnis>​   scp <​Datei>​ <​Benutzer>​@<​Rechner>:<​Verzeichnis>​
-Fingerprint Hostkey überprüfen:+ 
 +====== Server Keys ====== 
 +===== Fingerprint Hostkey überprüfen ​=====
   ssh-keygen -l -f /​etc/​ssh/​ssh_host_rsa_key.pub   ssh-keygen -l -f /​etc/​ssh/​ssh_host_rsa_key.pub
  
-====== Server Keys neu erzeugen ​======+===== 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 === === Debian ===
   rm /​etc/​ssh/​ssh_host_*key*   rm /​etc/​ssh/​ssh_host_*key*
Zeile 42: Zeile 36:
  
 ====== Public-Private-Key Authentifizierung ====== ====== Public-Private-Key Authentifizierung ======
-Als Nutzer Schlüsselpaar erzeugen: +===== Als Nutzer Schlüsselpaar erzeugen ​===== 
-  ssh-keygen ​-t rsa -b 4096 -C "Kommentar" +Einfach
-  ssh-keygen -t ed25519  +  ssh-keygen 
-Public-Key auf anderen Rechner übertragen: +oder für Schlüssel mit Kommentar ​auf Basis von [[wpde>​Curve25519]] 
-  ssh-copy-id ​ -i .ssh/id_ed25519.pub nutzer05@notebook06 +  ssh-keygen -t ed25519 ​-C "​Kommentar"​ 
-oder alternativ+ 
-  ​cat .ssh/id_rsa.pub | ssh nutzer05@notebook06 ​"cat >> .ssh/​authorized_keys" +===== Public-Key auf anderen Rechner übertragen ​===== 
-  ssh nutzer05@notebook06 ​"chmod 400 .ssh/​authorized_keys"+  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 ===== ===== Serverseitig Passwortauthentifizierung abschalten =====
-''​/​etc/​ssh/​sshd_config'':​ + 
-<file>+<file txt /​etc/​ssh/​sshd_config>​
   UsePAM no   UsePAM no
   PasswordAuthentication no   PasswordAuthentication no
 </​file>​ </​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 ===== ===== Nutzer Zugriff beschränken =====
Zeile 63: Zeile 79:
  
 <file txt ~/​.ssh/​authorized_keys>​ <file txt ~/​.ssh/​authorized_keys>​
-command="/​bin/​cat /​var/​log/​messages",​no-agent-forwanding,​no-X11-forwarding,​no-port-forwarding ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHBqUtiLsRTLKquoVXKwhrPRD92CzaN9EOkVEfWoHfdC nutzer26@notebook26+command="​/usr/bin/who",​no-agent-forwanding,​no-X11-forwarding,​no-port-forwarding ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHBqUtiLsRTLKquoVXKwhrPRD92CzaN9EOkVEfWoHfdC nutzer26@notebook26
 </​file>​ </​file>​
 ==== mit Match ==== ==== mit Match ====
 <file txt /​etc/​ssh/​sshd_config>​ <file txt /​etc/​ssh/​sshd_config>​
 +
 Match User nutzer12 Match User nutzer12
-  ForceCommand /usr/local/bin/cat_messages+  ForceCommand /usr/bin/who
 </​file>​ </​file>​
  
-<file bash /​usr/​local/​bin/​cat_messages>​ +====== ​Fehlersuche ​====== 
-#!/bin/sh +  ssh -v nutzer06@notebook06 
-/bin/cat /​var/​log/​messages +  ssh -vv nutzer06@notebook06
-</​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 +
-)) +
-==== Agent-Forwarding nutzen ​==== +
-  ssh -A nutzer17@notebook17 +
-  ssh nutzer07@notebook07+
  
-==== SSH über mehrere Hops ====+====== SSH über mehrere Hops ======
 <​file>​ <​file>​
 +--------+ ​                 +------------+ ​               +------------+ +--------+ ​                 +------------+ ​               +------------+
 | ssh    |                  | Hop Server |                | server ​    | | ssh    |                  | Hop Server |                | server ​    |
-| client |                  | notebook01 |                | notebook02 |+| client |  _ _ _ ssh _ _ _ | notebook01 |                | notebook02 |
 |        | ================ssh========tunnel============>​ |            | |        | ================ssh========tunnel============>​ |            |
-+--------+ ​                 +------------+ ​               +------------+++--------+ ​ ​̅ ​ ̅  ̅  ̅  ̅  ̅  ̅  ̅  ​+------------+ ​               +------------+
 </​file>​ </​file>​
  
-=== Client === +===== Client ​===== 
-centos 7:+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 > <file text ~/​.ssh/​config >
 Host notebook02 Host notebook02
   Hostname notebook02.linuxhotel.de   Hostname notebook02.linuxhotel.de
-  ​ProxyCommand ssh notebook01.linuxhotel.de ​-W %h:%p+  ​ProxyJump ​notebook01.linuxhotel.de
 </​file>​ </​file>​
  
-Bei älteren SSH-Versionen muss zusätzlich ''​netcat''​ bzw. ''​nc''​ installiert sein: +  ​ssh notebook02
-''​~/​.ssh/​config''​ : ( debian 6.0, centos 6 )+
  
-<​file>​+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 Host notebook02
   Hostname notebook02.linuxhotel.de   Hostname notebook02.linuxhotel.de
Zeile 113: Zeile 141:
 </​file>​ </​file>​
  
-=== Hop Server === +===== Hop Server ​===== 
-//optional//, damit sich der Benutzer nicht auf dem Hop-Server einloggen kann+//optionale// Absicherung, damit sich der Benutzer nicht auf dem Hop-Server einloggen kann
  
-''​/​etc/​ssh/​sshd_config''​ : +<file txt /​etc/​ssh/​sshd_config>​ 
-<file>+# nutzer02 wird auf notebook02 weitergeleitet:​
 Match User nutzer02 Match User nutzer02
-  ForceCommand ​nc notebook02 ​22+  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>​ </​file>​
  
-=== testen ​=== +===== Agent-Forwarding nutzen ​===== 
-  ssh notebook02+  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 ==== ==== Sicherheitseinschränkung bei Agent-Forwarding ====
-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  +Sockets zu den ssh-agents anzeigen: 
-  * Prozess-Nummern ( ''​-t''​ ),   +  ls -ld /​tmp/​ssh-*/​agent* 
-  * die dem verbundenen Benutzer gehören ( ''​-u''​ ), + 
 +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''​ ),   * die eine IP-Verbindung geöffnent haben ( ''​-i''​ ),
-  * deren Namen mit der Zeichenkette ''​sshd''​ beginnt ( ''​-c''​ )+  * deren Namen mit der Zeichenkette ''​sshd''​ beginnt ( ''​-c'' ​), 
 +  * und die dem verbundenen Benutzer gehören ( ''​-u''​ )  
 +))
  
-  PIDS="​$(lsof -a -i -c sshd -u nutzer05 ​-t)"+  PIDS="​$(lsof ​-t -a -i -c sshd -u nutzer05)"​
  
-Weiter sucht er nach dazu passenden Socket-Dateien ( ''/​tmp/​ssh-*/​agent.$pid''​ ), und speichert ​die letzte ​( ''​tail -n 1''​ ) in der Variablen ''​SSH_AUTH_SOCK''​+(( 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 ls /​tmp/​ssh-*/​agent.$pid;​ done 2>/​dev/​null ​tail -n 1)+  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: Auch ein ssh-agent auf dem client-Rechner kann ähnlich mitgenutzt werden:
  
-  ​export SSH_AGENT_PID=$(pgrep -u nutzer05 ​-x '​ssh-agent'​) +  ​PIDS="$(lsof ---a -U -c /​agent/ ​-u nutzer05)"
-  SSH_AUTH_SOCK=$(lsof ​-a -U -p $SSH_AGENT_PID ​-F n | tail -n 1) +
-  export SSH_AUTH_SOCK=${SSH_AUTH_SOCK#​n} +
-  ssh nutzer07@notebook07+
  
-====== Fehlersuche ====== +Weitere Diskussion auch: [[https://​heipei.github.io/​2015/​02/​26/​SSH-Agent-Forwarding-considered-harmful/​|diesen Link]]
-  ssh -v nutzer06@notebook06 +
-  ssh -vv nutzer06@notebook06+
  
 ====== SSH Tunnel ====== ====== SSH Tunnel ======
Zeile 171: Zeile 212:
   help   help
   -L <lokaler Port>:<​Zielrechner>:<​Zielport>​   -L <lokaler Port>:<​Zielrechner>:<​Zielport>​
 +
 +===== SOCKS Tunnel =====
 +z.B. für Firefox:
 +
 +  ssh -D 1080 <​Zielrechner>​
  
 ===== IP Tunnel / VPN ===== ===== IP Tunnel / VPN =====
lpi1/ssh.txt · Zuletzt geändert: 2024/03/01 14:17 (Externe Bearbeitung)