Mittwoch, 8. April 2015

5 Wenig bekannte Features von SSH

SSH hat viele Features welche nicht alle gleich geläufig sind.

Bo Jeanes hat einen tollen Screencast erstellt, welcher folgende Features und noch einige mehr live erklärt. Der Screencast dauert ca. 60 Minuten und stellt unzählige SSH-Features vor.

Ich stelle hier kurz meine persönlichen Highlights aus dem Video vor.

1. ProxyCommand

Angenommen ich muss auf einen Host beta zugreifen via anderen Host alpha (weil er nicht direkt erreichbar ist).
Anstatt jedes Mal manuell ssh alpha gefolgt von ssh beta aufzurufen, kann man sich eine Konfiguration mit ProxyCommand in .ssh/config anlegen
welche einem diese Arbeit abnimmt. Man muss danach nur noch ssh beta eingeben um sich direkt mit dem Host zu verbinden..
Das Ganze funktioniert auch mit Port Forwards!

proxy-command
Proxy Command












Eintrag in .ssh/config:

Host alpha  

HostName alpha.mydomain.com
  ForwardAgent yes

Host beta
  Hostname beta.mydomain.com
  ProxyCommand ssh alpha -W %h:%p


Meistens findet man Beispiele mit "nc" (netcat). Da dies auf Solaris nicht überall verfügbar ist, gibt es seit OpenSSH 5.4 auch eine version ohne netcat.
Hier gefunden: http://www.bsdnow.tv/tutorials/ssh-chaining

2. Dynamic Port Forwarding

Wer schon einmal extern für eine Firma ohne VPN gearbeitet hat, kennt das Problem. Um interne Hosts zu erreichen muss man sich zuerst dutzende von SSH-Tunnels graben.

Doch SSH unterstützt auch einen Mechanismus welcher dynamisch Port-Forwards erstellt, das "dynamic port forwarding".
Als Befehlt lässt es sich mit so starten:

ssh -D 1080 alpha.mydomain.com

Damit wird ein lokaler SOCKS proxy auf port 1080 gestartet. Nun muss nur noch das Betriebssystem konfiguriert werden diesen Proxy zu benutzen. Danach läuft der komplette Netzwerkverkehr über alpha.

Referenz: https://www.debian-administration.org/article/449/SSH_dynamic_port_forwarding_with_SOCKS

3. SSH Console

Auch "SSH Escape Tilde" genannt.
Um eine hängende SSH-Verbindung zu beenden kann man dem SSH-Client einen einfachen Befehl senden.

Nötig ist dazu die Eingabe von Tilde gefolgt von einem Punkt: ~.
Akzeptiert wird diese Eingabe nur auf einer neuen Zeile.

Die ganze Liste aller Befehle findet sich auf der manpage von ssh.

     ~.      Disconnect.
     ~^Z     Background ssh.
     ~#      List forwarded connections.
     ~&      Background ssh at logout
     ~?      Display a list of escape characters.
     ~B      Send a BREAK to the remote system.
     ~C      Open command line.
     ~R      Request rekeying of the connection
     ~V      Decrease the verbosity
     ~v      Increase the verbosity


4. Agent forwarding

Um einfach von einem Host zum nächsten hüpfen zu können, kann SSH die geladenen Private-Keys an den nächsten Host weiterreichen.

ssh -A alpha

Der entsprechende Eintrag in .ssh/config lautet:

Host alpha
  ForwardAgent yes

Der Gebrauch dieses Features sollte von einer gewissen Vorsicht begleitet werden. Falls Host alpha kompromittiert ist, könnte root auf diesem System die Agent-Verbindung ausnutzen.

Agent Forwarding kann vom Administrator eines Systems unterbunden werden mit der Direktive  AllowAgentForwarding no in /etc/sshd_config.

Schön illustriert auf dieser Seite:

5. Keepalive

Wer ständig im Hintergrund SSH-Sessions offen hat, der hat sich bestimmt auch schon genervt über solche Fehlermeldungen:

[user@remote ~]$ 
Write failed: Broken pipe

Abhilfe bietet ein kurzer Eintrag für alle Hosts in .ssh/config:

Host *
  ServerAliveInterval 60

Auch für Windows-User gibt es eine entsprechende Option in der Putty-Konfiguration.

Referenz:
https://sysadmincasts.com/episodes/39-cli-monday-how-to-keep-your-ssh-sessions-alive