admin_grundlagen:ssh
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
| Beide Seiten, vorherige ÜberarbeitungVorherige ÜberarbeitungNächste Überarbeitung | Vorherige Überarbeitung | ||
| admin_grundlagen:ssh [2012/02/06 12:34] – [Grundfunktionen] ingo_wichmann | admin_grundlagen:ssh [2025/08/14 12:24] (aktuell) – [Syntax prüfen] ingo_wichmann | ||
|---|---|---|---|
| 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 14: | Zeile 27: | ||
| ssh < | ssh < | ||
| - | Dateien auf andere Rechner kopieren: (( manchmal ist hier auch [[tar# | + | hängende ssh-Verbindung beenden: |
| + | ~. | ||
| + | |||
| + | ssh-Verbindung pausieren: | ||
| + | ~Strg+z | ||
| + | |||
| + | Dateien auf andere Rechner kopieren: (( manchmal ist hier auch [[rsync]] oder [[tar# | ||
| scp < | scp < | ||
| Dateien auf andere Rechner ohne lange Pfadangaben ins $HOME-Verzeichnis von < | Dateien auf andere Rechner ohne lange Pfadangaben ins $HOME-Verzeichnis von < | ||
| - | scp < | + | scp < |
| - | Fingerprint Hostkey überprüfen: | + | |
| - | ssh-keygen -l -f / | + | |
| - | ====== 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 / | ||
| + | |||
| + | ===== 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 / | rm / | ||
| + | === 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 | + | Einfach: |
| - | Public-Key | + | ssh-keygen |
| - | ssh-copy-id | + | oder für Schlüssel mit Kommentar auf Basis von [[wpde> |
| - | oder alternativ: | + | ssh-keygen |
| - | cat .ssh/ | + | |
| - | ssh nutzer05@notebook05 "chmod 400 .ssh/ | + | |
| - | hängende | + | ===== Public-Key auf anderen Rechner übertragen ===== |
| - | ~. | + | |
| - | + | oder von Hand: | |
| - | ssh-Verbindung pausieren: | + | |
| - | ~Strg+z | + | |
| + | ssh nutzer05@notebook06 'chmod 600 .ssh/ | ||
| ===== Serverseitig Passwortauthentifizierung abschalten ===== | ===== Serverseitig Passwortauthentifizierung abschalten ===== | ||
| - | '' | + | |
| - | <file> | + | <file txt / |
| - | UsePAM no | + | UsePAM |
| + | KbdInteractiveAuthentication | ||
| PasswordAuthentication no | PasswordAuthentication no | ||
| </ | </ | ||
| + | |||
| + | ==== Syntax prüfen ==== | ||
| + | sshd -t | ||
| + | |||
| + | ==== Dienst neu starten ==== | ||
| + | systemctl restart ssh.service | ||
| ===== ssh-agent ===== | ===== ssh-agent ===== | ||
| Schlüssel dem '' | Schlüssel dem '' | ||
| - | ssh-add | + | ssh-add .ssh/id_rsa |
| - | Bei SuSE 11.0 wird der '' | + | ((Bei openSuSE |
| 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 ===== |
| - | ((ausführlicher beschrieben unter http://sshmenu.sourceforge.net/articles/transparent-mulithop.html)) | + | ==== mit authorized_keys command ==== |
| + | //Problem: die Datei '' | ||
| - | '' | + | <file txt ~/.ssh/ |
| + | restrict, | ||
| + | </ | ||
| + | ==== mit Match ==== | ||
| + | <file txt / | ||
| + | … | ||
| + | Match User nutzer12 | ||
| + | ForceCommand / | ||
| + | </ | ||
| + | |||
| + | ====== Fehlersuche ====== | ||
| + | ssh -v nutzer06@notebook06 | ||
| + | ssh -vv nutzer06@notebook06 | ||
| - | '' | + | ====== SSH über mehrere Hops ====== |
| < | < | ||
| - | Host notebook01 | + | +--------+ |
| - | | + | | ssh | | Hop Server | | server |
| - | | + | | client | _ _ _ ssh _ _ _ | notebook01 |
| + | | | ================ssh========tunnel============> | ||
| + | +--------+ | ||
| + | </ | ||
| + | |||
| + | ===== Client ===== | ||
| + | centos 7.4, debian 9, ubuntu 18.04: (ab OpenSSH-Version 7.3) | ||
| + | |||
| + | ssh -J notebook01.linuxhotel.de notebook02.linuxhotel.de | ||
| + | |||
| + | mit einer '' | ||
| + | <file text ~/ | ||
| Host notebook02 | Host notebook02 | ||
| Hostname notebook02.linuxhotel.de | Hostname notebook02.linuxhotel.de | ||
| - | | + | |
| </ | </ | ||
| ssh notebook02 | ssh notebook02 | ||
| - | ==== SSH skriptbar über mehrere Hops ==== | + | Bei älteren SSH-Versionen: |
| - | Befehl per Skript auf notebook16 ausführen, notebook16 ist nur via notebook15 zu erreichen: | + | |
| - | ssh-agent bash -c "ssh-add .ssh/id_dsa; | + | centos 7, debian 8, ubuntu 16.04: |
| + | |||
| + | ssh -o ProxyCommand="ssh -W %h:%p notebook01.linuxhotel.de" | ||
| + | |||
| + | mit einer '' | ||
| + | |||
| + | <file text ~/ | ||
| + | Host notebook02 | ||
| + | Hostname notebook02.linuxhotel.de | ||
| + | ProxyCommand ssh -W %h:%p notebook01.linuxhotel.de | ||
| + | </ | ||
| + | |||
| + | ssh notebook02 | ||
| + | |||
| + | Bei noch älteren SSH-Versionen muss zusätzlich '' | ||
| + | |||
| + | debian 6, centos 6: | ||
| + | <file text ~/ | ||
| + | Host notebook02 | ||
| + | Hostname notebook02.linuxhotel.de | ||
| + | ProxyCommand ssh -q notebook01.linuxhotel.de nc %h %p | ||
| + | </ | ||
| + | |||
| + | ===== Hop Server ===== | ||
| + | // | ||
| + | |||
| + | <file txt / | ||
| + | # nutzer02 wird auf notebook02 weitergeleitet: | ||
| + | Match User nutzer02 | ||
| + | | ||
| + | |||
| + | # nutzer01 wird auf den mit der Option | ||
| + | Match User nutzer01 | ||
| + | ForceCommand | ||
| + | </ | ||
| + | |||
| + | <file txt ~/.ssh/authorized_keys> | ||
| + | restrict, | ||
| + | </ | ||
| + | ===== Agent-Forwarding nutzen ===== | ||
| + | | ||
| + | | ||
| + | |||
| + | besser, mit Konfigdatei: | ||
| + | <file txt ~/ | ||
| + | Host notebook17 | ||
| + | ForwardAgent yes | ||
| + | IdentityFile ~/ | ||
| + | IdentitiesOnly yes | ||
| + | </ | ||
| ==== 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 " | + | Sockets zu den ssh-agents anzeigen: |
| - | * Prozess-Nummern ( '' | + | ls -ld / |
| - | * die dem verbundenen Benutzer gehören ( '' | + | |
| + | 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 " | ||
| + | * Prozess-Nummern ( '' | ||
| * die eine IP-Verbindung geöffnent haben ( '' | * die eine IP-Verbindung geöffnent haben ( '' | ||
| - | * deren Namen mit der Zeichenkette '' | + | * deren Namen mit der Zeichenkette '' |
| + | * und die dem verbundenen Benutzer gehören ( '' | ||
| + | )) | ||
| - | PIDS=" | + | PIDS=" |
| - | Weiter sucht er nach dazu passenden Socket-Dateien ( ''/ | + | (( Weiter sucht er nach dazu passenden Socket-Dateien ( ''/ |
| - | export SSH_AUTH_SOCK=$(for pid in $PIDS; do ls / | + | export SSH_AUTH_SOCK=$(for pid in $PIDS; do echo / |
| + | |||
| + | 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: | ||
| - | | + | |
| - | SSH_AUTH_SOCK=$(lsof | + | |
| - | export SSH_AUTH_SOCK=${SSH_AUTH_SOCK# | + | |
| - | ssh nutzer07@notebook07 | + | |
| - | ====== Fehlersuche ====== | + | Weitere Diskussion auch: [[https:// |
| - | ssh -v nutzer06@notebook06 | + | |
| - | ssh -vv nutzer06@notebook06 | + | |
| ====== SSH Tunnel ====== | ====== SSH Tunnel ====== | ||
| Zeile 126: | Zeile 241: | ||
| help | help | ||
| -L <lokaler Port>:< | -L <lokaler Port>:< | ||
| - | ===== ppp over ssh ===== | ||
| - | Dies ist nur ein Beispiel um zu zeigen das das geht. In der Praxis würde ich immer OpenVPN oder ähnliche Lösungen verwenden. | ||
| - | ==== Einfache Variante | + | ===== SOCKS Tunnel ===== |
| - | pppd noauth nodetach pty "ssh root@notebook05 pppd idle 300 nodetach notty noauth" | + | z.B. für Firefox: |
| - | ==== Komplexe Variante ==== | + | ssh -D 1080 < |
| - | PPP over SSH - Tunnel bauen mit Standartwerkzeugen | + | |
| - | Die Lösung ist noch nicht ausreichend | + | ===== IP Tunnel / VPN ===== |
| + | //noch nicht getestet// | ||
| - | pppd | + | ==== Client ==== |
| - | ssh | + | ssh -f -w 0:1 192.168.1.15 true |
| - | | + | |
| + | route add 10.0.99.0/ | ||
| - | Damit baue ich eine solche Verbindung: | + | ==== Server |
| - | + | ''/ | |
| - | Notebook --> PPP-over-SSH --> Router --> Netzwerk ( 172.16.240.0/ | + | |
| - | + | ||
| - | ==== Zuerst die Einstellungen auf dem Router==== | + | |
| - | === SSH Client Konfiguration | + | |
| - | ''/ | + | |
| < | < | ||
| - | command="/ | + | PermitTunnel yes |
| </ | </ | ||
| - | Dieser Eintrag führt dazu, daß der '' | + | ifconfig tun1 10.1.1.2 10.1.1.1 netmask 255.255.255.252 |
| - | + | route add 10.0.50.0/24 10.1.1.1 | |
| - | Mehr Informationen dazu unter '' | + | |
| - | + | ||
| - | + | ||
| - | === sudo Konfiguration === | + | |
| - | ''/ | + | |
| - | < | + | |
| - | + | ||
| - | oder strenger: | + | |
| - | < | + | |
| - | 10.0.0.1\:10.0.0.2</ | + | |
| - | + | ||
| - | Dieser Eintrag führt dazu, daß die Benutzer " | + | |
| - | dem Rechner " | + | |
| - | Optionen mit root-Rechten ausführen dürfen. | + | |
| - | + | ||
| - | + | ||
| - | ==== Dann die Einstellungen auf dem Notebook ==== | + | |
| - | === sudo Konfiguration === | + | |
| - | ''/ | + | |
| - | < | + | |
| - | User_Alias PPP = user, andereruser | + | |
| - | PPP notebook=NOPASSWD: | + | |
| - | PPP notebook=NOPASSWD: | + | |
| - | </ | + | |
| - | + | ||
| - | oder strenger: | + | |
| - | < | + | |
| - | User_Alias PPP = user, andereruser | + | |
| - | PPP notebook=NOPASSWD: | + | |
| - | connect /bin/true pty "ssh user@router" | + | |
| - | PPP notebook=NOPASSWD: | + | |
| - | </ | + | |
| - | + | ||
| - | Dieser Eintrag führt dazu, daß die Benutzer " | + | |
| - | dem Rechner " | + | |
| - | den angegebenen Optionen mit root-Rechten ausführen dürfen. | + | |
| - | + | ||
| - | ====== sshd als ftp-Server Ersatz ====== | + | |
| - | scponly: http:// | + | |
| ====== Links ====== | ====== Links ====== | ||
admin_grundlagen/ssh.1328531692.txt.gz · Zuletzt geändert: 2012/02/06 12:34 von ingo_wichmann
