Dies ist eine alte Version des Dokuments!
Inhaltsverzeichnis
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
Debian
rm /etc/ssh/ssh_host_*key* dpkg-reconfigure openssh-server
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:
UsePAM no PasswordAuthentication no
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
nc ( netcat ) muss installiert sein.
~/.ssh/config :
Host notebook01 Hostname notebook01.linuxhotel.de ForwardAgent yes Host notebook02 Hostname notebook02.linuxhotel.de ProxyCommand ssh -q notebook01 nc -q0 notebook02 22
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
sshdbeginnt (-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
Allgemein:
ssh -L <lokaler Port>:<Zielrechner>:<Zielport> <Benutzer>@<ssh-Server>
Spezialfall X-Weiterleitung:
ssh -X <Benutzer>@<Rechner>
Dazu muß in der Datei /etc/ssh/sshd_config folgender Eintrag vorhanden sein:
X11Forwarding yes
Tunnel Rückwärts:
ssh -R <Port auf ssh-Server>:<Zielrechner>:<Zielport> <Benutzer>@<ssh-Server>
Dazu muß in der Datei /etc/ssh/sshd_config folgender Eintrag vorhanden sein:
GatewayPorts yes
Tunnel nachträglich anlegen:
~C help -L <lokaler Port>:<Zielrechner>:<Zielport>
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
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: http://www.sublimation.org/scponly/
