Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
lpi2:ssh [2014/07/17 07:47] ploeger [sshd als ftp-Server Ersatz] |
— (aktuell) | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== ssh ====== | ||
- | ===== Einsatzzwecke von ssh ===== | ||
- | * Fernadministration | ||
- | * Dateien übers Netz kopieren | ||
- | * 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 ====== | ||
- | Einloggen auf <Rechner> mit <Benutzer>: | ||
- | ssh <Benutzer>@<Rechner> | ||
- | In dem Zusammenhang ist die Nutzung von [[screen]] sehr hilfreich. | ||
- | |||
- | Dateien auf andere Rechner kopieren: | ||
- | scp <Datei> <Benutzer>@<Rechner>:/<Verzeichnis> | ||
- | Dateien auf andere Rechner ohne lange Pfadangaben ins $HOME-Verzeichnis von <Benutzer> kopieren: | ||
- | scp <Datei> <Benutzer>@<Rechner>:<Verzeichnis> | ||
- | Fingerprint Hostkey überprüfen: | ||
- | ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key.pub | ||
- | |||
- | ====== Server Keys neu erzeugen ====== | ||
- | rm /etc/ssh/ssh_host_*key* | ||
- | === CentOS 6 === | ||
- | service sshd restart | ||
- | === Debian === | ||
- | dpkg-reconfigure openssh-server | ||
- | ==== Clientseitig Server-Key löschen ==== | ||
- | ssh-keygen -R server-name | ||
- | |||
- | ====== Public-Private-Key Authentifizierung ====== | ||
- | Als Nutzer Schlüsselpaar erzeugen: | ||
- | ssh-keygen -d -C "Kommentar" | ||
- | Public-Key auf anderen Rechner übertragen: | ||
- | ssh-copy-id -i .ssh/id_dsa.pub nutzer05@notebook05 | ||
- | oder alternativ: | ||
- | cat .ssh/id_dsa.pub | ssh nutzer05@notebook05 "cat >> .ssh/authorized_keys" | ||
- | ssh nutzer05@notebook05 "chmod 400 .ssh/authorized_keys" | ||
- | |||
- | ===== Serverseitig Passwortauthentifizierung abschalten ===== | ||
- | ''/etc/ssh/sshd_config'': | ||
- | <file> | ||
- | UsePAM no | ||
- | PasswordAuthentication no | ||
- | </file> | ||
- | |||
- | ===== ssh-agent ===== | ||
- | Schlüssel dem ''ssh-agent'' hinzufügen: | ||
- | ssh-add -i .ssh/id_dsa | ||
- | |||
- | 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 | ||
- | |||
- | ==== SSH über mehrere Hops ==== | ||
- | ((ausführlicher beschrieben unter http://sshmenu.sourceforge.net/articles/transparent-mulithop.html)) | ||
- | |||
- | ''~/.ssh/config'' : | ||
- | <file> | ||
- | Host notebook01 | ||
- | Hostname notebook01.linuxhotel.de | ||
- | ForwardAgent yes | ||
- | |||
- | Host notebook02 | ||
- | Hostname notebook02.linuxhotel.de | ||
- | ProxyCommand ssh -W %h:%p notebook01 | ||
- | </file> | ||
- | |||
- | ssh notebook02 | ||
- | |||
- | ==== SSH skriptbar über mehrere Hops ==== | ||
- | Befehl per Skript auf notebook16 ausführen, notebook16 ist nur via notebook15 zu erreichen: | ||
- | ssh-agent bash -c "ssh-add .ssh/id_dsa; ssh -A nutzer15@notebook15 ssh nutzer16@notebook16 ls" | ||
- | |||
- | ==== 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 <lokaler Port>:<Zielrechner>:<Zielport> <Benutzer>@<ssh-Server> | ||
- | oder | ||
- | ssh -f -L 8080:www.linuxhotel.de:80 nutzer03@notebook03 | ||
- | curl localhost:8080 | ||
- | |||
- | ==== X-Weiterleitung ==== | ||
- | ssh -X <Benutzer>@<Rechner> | ||
- | oder | ||
- | ssh -f -X notebook09 xterm | ||
- | |||
- | Dazu muß in der Datei ''/etc/ssh/sshd_config'' des Servers folgender Eintrag vorhanden sein: | ||
- | <file>X11Forwarding yes</file> | ||
- | |||
- | ==== Rückwärts ==== | ||
- | ssh -R <Port auf ssh-Server>:<Zielrechner>:<Zielport> <Benutzer>@<ssh-Server> | ||
- | |||
- | Dazu muß in der Datei ''/etc/ssh/sshd_config'' des Servers folgender Eintrag vorhanden sein: | ||
- | <file>GatewayPorts yes</file> | ||
- | |||
- | ==== 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 das 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'': | ||
- | <file> | ||
- | command="/usr/bin/sudo /usr/sbin/pppd nodetach notty noauth 10.0.0.1:10.0.0.2" ssh-dss laj4flksa7dflkj ... ( der Schlüssel ) ... | ||
- | </file> | ||
- | 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'': | ||
- | <file>user router=NOPASSWD: /usr/sbin/pppd *</file> | ||
- | |||
- | oder strenger: | ||
- | <file>user router=NOPASSWD: /usr/sbin/pppd nodetach notty noauth | ||
- | 10.0.0.1\:10.0.0.2</file> | ||
- | |||
- | 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'': | ||
- | <file> | ||
- | 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 | ||
- | </file> | ||
- | |||
- | oder strenger: | ||
- | <file> | ||
- | 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 | ||
- | </file> | ||
- | |||
- | 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 ]] |