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
lpi1:ssh [2015/12/11 11:42]
ingo_wichmann [SSH über mehrere Hops]
lpi1:ssh [2021/06/07 09:13] (aktuell)
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>:​ 
-Fingerprint Hostkey überprüfen:+ 
 +====== Syntax sshd prüfen ====== 
 +Vor dem Neustart des Dienstes die Konfigurationsdatei auf Syntaxfehler prüfen: 
 +  sshd -t 
 +oder ausführlicher:​ 
 +  sshd -dddt 
 +====== 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 ​===== 
-=== Debian ​===+Name und IP-Adresse aus known_hosts entfernen:​ 
 + 
 +  ssh-keygen -R notebook02 
 +  ssh-keygen -R 192.168.1.202 
 + 
 +===== Server Keys neu erzeugen ​===== 
 +löschen:
   rm /​etc/​ssh/​ssh_host_*key*   rm /​etc/​ssh/​ssh_host_*key*
 +=== Debian ===
   dpkg-reconfigure openssh-server   dpkg-reconfigure openssh-server
 +=== SuSE / RedHat ===
 +  service sshd restart
  
 ====== 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 87:
  
 <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+restrict,command="​/usr/bin/who" 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 149:
 </​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 ​=== +<file txt ~/​.ssh/​authorized_keys>​ 
-  ssh notebook02+restrict,​port-forwarding ssh-rsa AAAAB3NzaC1yc2EAXXXXXXXXXXXXXXXXXXXXXXXXX 
 +</​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 ==== ==== 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 223:
   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.1449834122.txt.gz · Zuletzt geändert: 2015/12/11 11:42 von ingo_wichmann