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
admin_grundlagen:ssh [2016/07/28 14:20]
ingo_wichmann [Client]
admin_grundlagen:ssh [2024/03/01 14:17] (aktuell)
ingo_wichmann [Serverseitig Passwortauthentifizierung abschalten]
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
- 
-===== 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 32: 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>:​
-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 ======
Zeile 49: 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 63: Zeile 83:
  
 Alternativ (CentOS 7) Alternativ (CentOS 7)
-<​file>​+<​file ​txt /​etc/​ssh/​sshd_config>
   UsePAM yes   UsePAM yes
   ChallengeResponseAuthentication no   ChallengeResponseAuthentication no
Zeile 69: Zeile 89:
 </​file>​ </​file>​
  
-===== Nutzer Zugriff beschränken ===== +==== Syntax prüfen ​==== 
-==== mit authorized_keys command ​==== +  ssh -t
-//Problem: die Datei ''​~/​.ssh/​authorized_keys''​ gehört dem Nutzer, den man einschränken möchte. //+
  
-<file txt ~/​.ssh/​authorized_keys>​ +==== Dienst neu starten ​==== 
-command="/​bin/​cat /​var/​log/​messages",​no-agent-forwanding,​no-X11-forwarding,​no-port-forwarding ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHBqUtiLsRTLKquoVXKwhrPRD92CzaN9EOkVEfWoHfdC nutzer26@notebook26 +  ​systemctl restart ​ssh@service
-</​file>​ +
-==== mit Match ==== +
-<file txt /etc/ssh/​sshd_config>​ +
-Match User nutzer12 +
-  ForceCommand /​usr/​local/​bin/​cat_messages +
-</​file>​+
  
-<file bash /​usr/​local/​bin/​cat_messages>​ 
-#!/bin/sh 
-/bin/cat /​var/​log/​messages 
-</​file>​ 
 ===== ssh-agent ===== ===== ssh-agent =====
 Schlüssel dem ''​ssh-agent''​ hinzufügen:​ Schlüssel dem ''​ssh-agent''​ hinzufügen:​
-  ssh-add .ssh/id_dsa+  ssh-add .ssh/id_rsa
  
 ((Bei openSuSE 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 ==== 
-  ssh -A nutzer17@notebook17 
-  ssh nutzer07@notebook07 
  
-==== Sicherheitseinschränkung bei Agent-Forwarding ==== +Prüfen, welche Schlüssel der agent kennt
-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  +  ​ssh-add -l
-  ​* 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)"​+===== 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 //
  
-(( Weiter sucht er nach dazu passenden Socket-Dateien ( ''/​tmp/ssh-*/agent.$pid''​ )und speichert eine ( ''​head -n 1''​ ) in der Variablen ''​SSH_AUTH_SOCK''​.)) +<file txt ~/.ssh/authorized_keys>​ 
- +restrict,command="/usr/bin/​who" ​ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHBqUtiLsRTLKquoVXKwhrPRD92CzaN9EOkVEfWoHfdC nutzer26@notebook26 
-  export SSH_AUTH_SOCK=$(for pid in $PIDS; do echo /tmp/ssh-*/agent.$pid; done | head -n 1) +</file> 
- +==== mit Match ==== 
-  ssh nutzer05@notebook07 +<file txt /etc/ssh/​sshd_config>​ 
- + 
-Auch ein ssh-agent auf dem client-Rechner kann ähnlich mitgenutzt werden: +Match User nutzer12 
- +  ​ForceCommand ​/usr/bin/who 
-  ​PIDS="​$(lsof -t -w -a -U -c /agent-u nutzer05)"​+</​file>​
  
 ====== Fehlersuche ====== ====== Fehlersuche ======
Zeile 125: Zeile 128:
 +--------+ ​                 +------------+ ​               +------------+ +--------+ ​                 +------------+ ​               +------------+
 | 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 -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   ssh -o ProxyCommand="​ssh -W %h:%p notebook01.linuxhotel.de"​ notebook02.linuxhotel.de
Zeile 145: Zeile 164:
   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 166: Zeile 185:
   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 ======
Zeile 188: Zeile 247:
   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.1469715606.txt.gz · Zuletzt geändert: 2016/07/28 14:20 von ingo_wichmann