====== ssh ====== ===== Server Keys ===== ==== Server Keys neu erzeugen ==== rm /etc/ssh/ssh_host_*key* === CentOS (ab 6), SuSE === service sshd restart === Debian === dpkg-reconfigure openssh-server ==== Clientseitig Server-Key löschen ==== ssh-keygen -R server-name ssh-keygen -R IP-Adressse ==== Im DNS ablegen ==== DNS Resource Records erzeugen: ssh-keygen -r servername oder ssh-keyscan -D servername und in der [[bind|DNS Zonendatei des primären Nameservers]] hinterlegen. === Clientseitige Einstellungen === Damit der OpenSSH Client den SSHFP-Einträgen im DNS vertraut muss DNSSEC für die Zone aktiviert sein. VerifyHostKeyDNS yes Ab glibc Version 2.31: options trust-ad Falls systemd-resolved genutzt wird: [Resolve] DNSSEC=allow-downgrade # oder # DNSSEC=yes ====== Public-Private-Key Authentifizierung ====== ===== Benutzerauthentifizierung ===== Als Nutzer Schlüsselpaar erzeugen: ssh-keygen -C "Kommentar" Public-Key auf anderen Rechner übertragen: ssh-copy-id -i .ssh/id_rsa.pub nutzer05@notebook05 oder alternativ: cat .ssh/id_rsa.pub | ssh nutzer05@notebook05 "cat >> .ssh/authorized_keys" ssh nutzer05@notebook05 "mkdir -m 700 .ssh" ssh nutzer05@notebook05 "chmod 600 .ssh/authorized_keys" ===== Serverseitig Passwortauthentifizierung abschalten ===== ''/etc/ssh/sshd_config'': UsePAM no PasswordAuthentication no ===== ssh-agent ===== Schlüssel dem ''ssh-agent'' hinzufügen: ssh-add -i .ssh/id_dsa Dem ''ssh-agent'' verfügbare Schlüssel anzeigen: ssh-add -l (( Bei SuSE 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 -A nutzer07@notebook07 ==== 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 * Prozess-Nummern ( ''-t'' ), * die dem verbundenen Benutzer gehören ( ''-u'' ), * die eine IP-Verbindung geöffnent haben ( ''-i'' ), * deren Namen mit der Zeichenkette ''sshd'' beginnt ( ''-c'' ) PIDS="$(lsof -a -i -c sshd -u nutzer05 -t)" 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'' export SSH_AUTH_SOCK=$(for pid in $PIDS; do ls /tmp/ssh-*/agent.$pid; done 2>/dev/null | tail -n 1) Auch ein ssh-agent auf dem client-Rechner kann ähnlich mitgenutzt werden: export SSH_AGENT_PID=$(pgrep -u nutzer05 -x 'ssh-agent') 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 ====== ssh -v nutzer06@notebook06 ssh -vv nutzer06@notebook06 ====== SSH Tunnel ====== ===== TCP Tunnel ===== ==== Vorwärts ==== ssh -L :: @ oder ssh -f -L 8080:www.linuxhotel.de:80 nutzer03@notebook03 curl localhost:8080 ==== X-Weiterleitung ==== ssh -X @ oder ssh -f -X notebook09 xterm Dazu muß in der Datei ''/etc/ssh/sshd_config'' des Servers folgender Eintrag vorhanden sein: X11Forwarding yes ==== Rückwärts ==== ssh -R :: @ Dazu muß in der Datei ''/etc/ssh/sshd_config'' des Servers folgender Eintrag vorhanden sein: GatewayPorts yes ==== Socks Proxy ==== für firefox, curl, ... ssh -f -D 1080 nutzer03@notebook09 curl --socks5 localhost:1080 www.linuxhotel.de ===== ppp over ssh ===== Dies ist nur ein Beispiel um zu zeigen, dass das geht. Eine modernere Variante ist die Funktion ''PermitTunnel'' von ssh zu nutzen. ==== Einfache Variante ==== pppd noauth nodetach pty "ssh root@notebook05 pppd idle 300 nodetach notty noauth" 192.168.2.1:192.168.2.2 ==== Komplexe Variante ==== PPP over SSH - Tunnel bauen mit Standartwerkzeugen Die Lösung ist noch nicht ausreichend getestet und wahrscheinlich unvollständig.Hier sind die Bausteine, die ich gerade nutze: pppd ssh sudo Damit baue ich eine solche Verbindung: Notebook --> PPP-over-SSH --> Router --> Netzwerk ( 172.16.240.0/24 ) ==== Zuerst die Einstellungen auf dem Router==== === SSH Client Konfiguration === ''/home/user/.ssh/authorized_keys'': command="/usr/bin/sudo /usr/sbin/pppd nodetach notty noauth 10.0.0.1:10.0.0.2" ssh-dss laj4flksa7dflkj ... ( der Schlüssel ) ... Dieser Eintrag führt dazu, daß der ''sshd'' für den Benutzer "user" den angegebenen Befehl ausführt, wenn der sich mit dem entsprechenden Schlüssel authentifiziert. Mehr Informationen dazu unter ''man sshd'', im Abschnitt "AUTHORIZED_KEYS FILE FORMAT" === sudo Konfiguration === ''/etc/sudoers'', editieren mit dem Befehl ''visudo'': user router=NOPASSWD: /usr/sbin/pppd * oder strenger: user router=NOPASSWD: /usr/sbin/pppd nodetach notty noauth 10.0.0.1\:10.0.0.2 Dieser Eintrag führt dazu, daß die Benutzer "user" und "andereruser" auf dem Rechner "router" den Befehl /usr/sbin/pppd mit den angegebenen Optionen mit root-Rechten ausführen dürfen. ==== Dann die Einstellungen auf dem Notebook ==== === sudo Konfiguration === ''/etc/sudoers'', editieren mit dem Befehl ''visudo'': User_Alias PPP = user, andereruser PPP notebook=NOPASSWD: /usr/sbin/pppd * PPP notebook=NOPASSWD: /sbin/route add -net 172.16.240.0/24 gw 10.0.0.2 oder strenger: User_Alias PPP = user, andereruser PPP notebook=NOPASSWD: /usr/sbin/pppd noauth nodetach persist demand connect /bin/true pty "ssh user@router" PPP notebook=NOPASSWD: /sbin/route add -net 172.16.240.0/24 gw 10.0.0.2 Dieser Eintrag führt dazu, daß die Benutzer "user" und "andereruser" auf dem Rechner "notebook" die Befehle ''/sbin/route'' und ''/usr/sbin/pppd'' mit den angegebenen Optionen mit root-Rechten ausführen dürfen. ====== sshd als ftp-Server Ersatz ====== scponly: https://github.com/scponly/scponly ====== Links ====== * [[ http://www.jfranken.de/homepages/johannes/vortraege/ssh1_inhalt.de.html | SSH Grundlagen von Johannes Franken ]] * [[ http://www.jfranken.de/homepages/johannes/vortraege/ssh2_inhalt.de.html | SSH Tunnels von Johannes Franken ]] * [[ http://www.jfranken.de/homepages/johannes/vortraege/ssh3_inhalt.de.html | Firewalls durchbohren von Johannes Franken ]] * [[ http://www.employees.org/~satch/ssh/faq/ssh-faq.html | SSH FAQ englisch ]] * [[ http://www.openssh.org/de/index.html | SSH Homepage deutsch ]]