Tipp: SSH-Multiplexing
Viele Software-Entwickler setzen den SSH-Client ein, um auf entfernte Test- oder Produktionssysteme zuzugreifen – verwenden dabei allerdings nur einen minimalen Teil der angebotenen Funktionalität. Dabei befinden sich unter den zahlreichen Konfigurationseinstellungen auch viele, die für die tägliche Arbeit nützlich sind. Besonders interessant finde ich das kaum bekannte Multiplexing
, auf das ich im Folgenden eingehe.
Der Verbindungsaufbau von SSH ist gefühlt ziemlich langsam. Mit einer Paketumlaufzeit von ungefähr 63 Millisekunden benötigt der folgende Befehl bei mir über 0,95 Sekunden. Das ist zu viel – insbesondere wenn wiederholt Aufrufe über SSH abgesetzt werden sollen.
$ ssh test@example.org dateMultiplexing ist eine Lösung für dieses Problem. Es bedeutet im Wesentlichen, dass der SSH-Client eine bereits bestehende SSH-Sitzung verwenden kann, wodurch der teure Handshake für die zweite Verbindung entfällt. Dieses Verhalten lässt sich über die beiden Optionen ControlMaster und ControlPath steuern.
Der erste Befehl erzeugt eine SSH-Sitzung, deren Verbindung von anderen SSH-Sitzungen mit dem gleichen Ziel mitbenutzt werden kann. Der zweite Befehl nutzt die bestehende Verbindung nach Möglichkeit. Besteht die erste Verbindung noch, so benötigt der zweite Befehl in meinem Fall statt den ursprünglichen 0,95 Sekunden nur noch 0,14 Sekunden – ein sehr gutes Ergebnis bei einer Latenz von 63 Millisekunden.
$ ssh -o ControlMaster=yes -o ControlPath=/tmp/control test@example.org$ ssh -o ControlPath=/tmp/control test@example.org dateFür den typischen SSH-Einsatz reicht dieses Vorgehen noch nicht aus, da es nur greift, solange eine Master-Verbindung existiert. Zwei weitere Maßnahmen schließen diese Lücke:
- Die Option
ControlMaster=autobewirkt, dass automatisch eine Master-Verbindung erzeugt wird, falls noch keine existiert. Damit muss der Anwender nicht explizit zwischen Master und Slave unterscheiden. - Die Option
ControlPersist=300bewirkt, dass die Master-Verbindung über die Lebenszeit des erzeugenden SSH-Aufrufs hinweg bestehen bleibt und erst nach 300 Sekunden ohne Nutzung geschlossen wird.
Die Optionen packt man am Einfachsten an den Anfang der Konfigurationsdatei ~/.ssh/config. Damit wirken sie sich automatisch auf alle neuen SSH-Verbindungen aus, und man wird überrascht sein, wie schnell sich der Verbindungsaufbau von SSH plötzlich anfühlt.
Host *
ControlMaster auto
ControlPath ~/.ssh/control-%r@%h:%p
ControlPersist 300
