Linuxhotel Wiki

Wie ging das nochmal?

Benutzer-Werkzeuge

Webseiten-Werkzeuge


admin_grundlagen: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
Letzte Überarbeitung Beide Seiten, nächste Überarbeitung
admin_grundlagen:ssh [2012/03/07 00:48]
ingo_wichmann [SSH über mehrere Hops]
admin_grundlagen:ssh [2023/12/27 10:47]
ingo_wichmann [mit authorized_keys command]
Zeile 1: Zeile 1:
 ====== ssh ====== ====== ssh ======
 +
 +===== ssh in firewalld freischalten =====
 +
 +**Enable firewall rule for ssh.**
 +
 +  sudo firewall-cmd --permanent --add-service=ssh
 +  success
 +
 +**Reload firewall rules.**
 +
 +  sudo firewall-cmd --reload
 +  success
 +
 +oder Firewall abschalten:
 +
 +  systemctl stop firewalld.service
 +
 +
 ===== Einsatzzwecke von ssh ===== ===== Einsatzzwecke von ssh =====
   * Fernadministration   * Fernadministration
   * 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 20: Zeile 33:
   ~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:​ +
-  ssh-keygen -l -f /​etc/​ssh/​ssh_host_rsa_key.pub+
  
-====== Server Keys neu erzeugen ​====== +====== Syntax sshd prüfen ====== 
-=== Debian ​===+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_ed25519_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 ===== 
 +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 dsa -C "​Kommentar"​ +Einfach: 
-Public-Key auf anderen Rechner übertragen: +  ssh-keygen 
-  ssh-copy-id ​ -i .ssh/id_dsa.pub nutzer05@notebook06 +oder für Schlüssel mit Kommentar auf Basis von [[wpde>​Curve25519]] 
-oder alternativ+  ssh-keygen -t ed25519 ​-C "​Kommentar"​ 
-  ​cat .ssh/id_dsa.pub | ssh nutzer05@notebook06 ​"cat >> .ssh/​authorized_keys" + 
-  ssh nutzer05@notebook06 ​"chmod 400 .ssh/​authorized_keys"+===== Public-Key auf anderen Rechner übertragen ​===== 
 +  ssh-copy-id -i .ssh/id_ed25519.pub nutzer05@notebook06 
 +oder von Hand
 +  ssh nutzer05@notebook06 'mkdir -m 700 ~/.ssh' 
 +  ​ssh nutzer05@notebook06 ​'cat >> .ssh/​authorized_keys' < ~/​.ssh/​id_ed25519.pub 
 +  ssh nutzer05@notebook06 ​'chmod 600 .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
 +</​file>​
 +
 +Alternativ (CentOS 7)
 +<file txt /​etc/​ssh/​sshd_config>​
 +  UsePAM yes
 +  ChallengeResponseAuthentication no
   PasswordAuthentication no   PasswordAuthentication no
 </​file>​ </​file>​
Zeile 50: Zeile 91:
 ===== ssh-agent ===== ===== ssh-agent =====
 Schlüssel dem ''​ssh-agent''​ hinzufügen:​ Schlüssel dem ''​ssh-agent''​ hinzufügen:​
-  ssh-add ​-i .ssh/id_dsa+  ssh-add .ssh/id_rsa
  
-Bei SuSE 11.0 wird der ''​ssh-agent''​ bei der Anmeldung nur gestartet, wenn das Verzeichnis ''​~/​.ssh''​ existiert:+((Bei openSuSE ​11.0 wird der ''​ssh-agent''​ bei der Anmeldung nur gestartet, wenn das Verzeichnis ''​~/​.ssh''​ existiert:
   mkdir -m 700 ~/.ssh   mkdir -m 700 ~/.ssh
 +))
  
-==== Agent-Forwarding nutzen ==== +Prüfen, welche Schlüssel der agent kennt: 
-  ssh -A nutzer17@notebook17 +  ssh-add -l
-  ssh -A nutzer07@notebook07+
  
-==== SSH über mehrere Hops ====+===== Nutzer Zugriff beschränken ===== 
 +==== mit authorized_keys command ==== 
 +//Problem: die Datei ''​~/​.ssh/​authorized_keys''​ gehört dem Nutzer, den man einschränken möchte. Mögliche Lösung: AuthorizedKeysFile,​ AuthorizedKeysCommand und AuthorizedKeysCommandUser // 
 + 
 +<file txt ~/​.ssh/​authorized_keys>​ 
 +restrict,​command="/​usr/​bin/​who"​ 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>​ <​file>​
 +--------+ ​                 +------------+ ​               +------------+ +--------+ ​                 +------------+ ​               +------------+
 | ssh    |                  | Hop Server |                | server ​    | | ssh    |                  | Hop Server |                | server ​    |
-| client |                  | notebook01 |                | notebook02 | +| client |  _ _ _ ssh _ _ _ | notebook01 |                | notebook02 | 
-|        | ===ssh=over=netcat=tunnel====================>​ |            | +|        | ================ssh========tunnel============>​ |            | 
-+--------+ ​                 +------------+ ​               +------------+++--------+ ​ ​̅ ​ ̅  ̅  ̅  ̅  ̅  ̅  ̅  ​+------------+ ​               +------------+
 </​file>​ </​file>​
-((ausführlicher beschrieben unter http://​sshmenu.sourceforge.net/​articles/​transparent-mulithop.html)) 
  
-''​nc''​ ( netcat ) muss installiert sein. (( laut http://​www.rschulz.eu/​2008/​09/​ssh-proxycommand-without-netcat.html geht das auch ohne netcat: +===== Client ===== 
-  ProxyCommand ssh {gw} '​exec ​3<>/​dev/​tcp/​{host}/​22;​ cat <&3 & cat >&​3;​kill $!' +centos 7.4, debian 9, ubuntu 18.04: ​(ab OpenSSH-Version 7.3)
-habe ich aber noch nicht gestestet ))+
  
-=== Client === +  ​ssh -J notebook01.linuxhotel.de notebook02.linuxhotel.de
-''​~/​.ssh/​config''​ : ( debian 6.0, centos 6 )+
  
-<​file>​+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 Host notebook02
   Hostname notebook02.linuxhotel.de   Hostname notebook02.linuxhotel.de
Zeile 82: Zeile 167:
 </​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 140: Zeile 241:
   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 =====
admin_grundlagen/ssh.txt · Zuletzt geändert: 2024/03/01 14:17 von ingo_wichmann