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 [2017/07/28 17:16]
ingo_wichmann [Agent-Forwarding nutzen]
admin_grundlagen:ssh [2023/12/27 10:47]
ingo_wichmann [mit authorized_keys command]
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.+====== 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
  
-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 ===== ===== Einsatzzwecke von ssh =====
   * Fernadministration   * Fernadministration
   * Dateien übers Netz kopieren   * Dateien übers Netz kopieren
   * Tunnel bauen   * Tunnel bauen
- 
- 
  
 ====== Grundfunktionen ====== ====== Grundfunktionen ======
Zeile 29: Zeile 36:
   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>:​
  
 +====== Syntax sshd prüfen ======
 +Vor dem Neustart des Dienstes die Konfigurationsdatei auf Syntaxfehler prüfen:
 +  sshd -t
 +oder ausführlicher:​
 +  sshd -dddt
 ====== Server Keys ====== ====== Server Keys ======
 ===== Fingerprint Hostkey überprüfen ===== ===== Fingerprint Hostkey überprüfen =====
-  ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key.pub+  ssh-keygen -l -f /etc/ssh/ssh_host_ed25519_key.pub
  
 ===== Server Key aus known_hosts entfernen ===== ===== Server Key aus known_hosts entfernen =====
 +Name und IP-Adresse aus known_hosts entfernen:
 +
   ssh-keygen -R notebook02   ssh-keygen -R notebook02
   ssh-keygen -R 192.168.1.202   ssh-keygen -R 192.168.1.202
  
 ===== Server Keys neu erzeugen ===== ===== Server Keys neu erzeugen =====
-=== Debian ===+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 ======
Zeile 52: Zeile 69:
  
 ===== Public-Key auf anderen Rechner übertragen ===== ===== Public-Key auf anderen Rechner übertragen =====
-  ssh-copy-id -i .ssh/id_rsa.pub nutzer05@notebook06+  ssh-copy-id -i .ssh/id_ed25519.pub nutzer05@notebook06
 oder von Hand: oder von Hand:
   ssh nutzer05@notebook06 'mkdir -m 700 ~/​.ssh'​   ssh nutzer05@notebook06 'mkdir -m 700 ~/​.ssh'​
-  ssh nutzer05@notebook06 'cat >> .ssh/​authorized_keys'​ < ~/.ssh/id_rsa.pub +  ssh nutzer05@notebook06 'cat >> .ssh/​authorized_keys'​ < ~/.ssh/id_ed25519.pub 
-  ssh nutzer05@notebook06 '​chmod ​400 .ssh/​authorized_keys'​+  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   PasswordAuthentication no
Zeile 66: Zeile 83:
  
 Alternativ (CentOS 7) Alternativ (CentOS 7)
-<​file>​+<​file ​txt /​etc/​ssh/​sshd_config>
   UsePAM yes   UsePAM yes
   ChallengeResponseAuthentication no   ChallengeResponseAuthentication no
   PasswordAuthentication no   PasswordAuthentication no
 </​file>​ </​file>​
 +
 +===== ssh-agent =====
 +Schlüssel dem ''​ssh-agent''​ hinzufügen:​
 +  ssh-add .ssh/id_rsa
 +
 +((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 =====
 ==== mit authorized_keys command ==== ==== mit authorized_keys command ====
-//Problem: die Datei ''​~/​.ssh/​authorized_keys''​ gehört dem Nutzer, den man einschränken möchte. //+//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>​ <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>​ 
-#!/bin/sh 
-/bin/cat /​var/​log/​messages 
-</​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 
- 
-besser, mit Konfigdatei:​ 
-<file txt ~/​.ssh/​config>​ 
-Host notebook15 
-  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)"​ 
  
 ====== Fehlersuche ====== ====== Fehlersuche ======
Zeile 139: Zeile 122:
 +--------+ ​                 +------------+ ​               +------------+ +--------+ ​                 +------------+ ​               +------------+
 | 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, debian ​8:+centos 7.4, debian ​9, ubuntu 18.04(ab OpenSSH-Version 7.3)
  
-  ssh -o ProxyCommand="​ssh -W %h:%p notebook01.linuxhotel.de"​ notebook02.linuxhotel.de 
-(( ab OpenSSH-Version 7.3 reduziert sich das zu 
   ssh -J notebook01.linuxhotel.de notebook02.linuxhotel.de   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: mit einer ''​~/​.ssh/​config''​ reduziert sich das zu:
Zeile 162: Zeile 158:
   ssh notebook02   ssh notebook02
  
-Bei älteren SSH-Versionen muss zusätzlich ''​netcat''​ bzw. ''​nc''​ auf dem Jumphost installiert sein:+Bei noch älteren SSH-Versionen muss zusätzlich ''​netcat''​ bzw. ''​nc''​ auf dem Jumphost installiert sein:
  
 debian 6, centos 6: debian 6, centos 6:
Zeile 183: Zeile 179:
   ForceCommand ssh %u@%h $SSH_ORIGINAL_COMMAND   ForceCommand ssh %u@%h $SSH_ORIGINAL_COMMAND
 </​file>​ </​file>​
 +
 +<file txt ~/​.ssh/​authorized_keys>​
 +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 ====
 +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 ====== ====== SSH Tunnel ======
admin_grundlagen/ssh.txt · Zuletzt geändert: 2024/03/01 14:17 von ingo_wichmann