Netzwerk und Internet

Mosh: Die mobile Shell mit Verbindungsschutz

Auf Verbindungsabbrüche reagiert SSH empfindlich. Die mobile Shell (Mosh) ist eine Ergänzung für SSH, die auch bei instabilen Netzwerkverbindungen den Kontakt zwischen Client und Server aufrechterhält.

Die Secure Shell (SSH) ist auf Unix-ähnlichen Systemen wie Linux der verbreitete Standard zur verschlüsselten Anmeldung und Datenübertragung auf der Kommandozeile. SSH-Verbindungen haben aber einen Nachteil bei Clients mit langsamen oder instabilen Internetverbindungen: Verbindungsabbrüche.

Denn das SSH-Protokoll arbeitet ausschließlich mit TCP (Transmission Control Protocol), das an den beiden Enden der SSH-Verbindung einen Socket (Protokoll-Schnittstelle) zur Datenübertragung öffnet.

Bleiben die TCP-Pakete eine Weile aus, dann bricht diese Verbindung zusammen. Diese Wartezeit beträgt bei TCP üblicherweise 20 Sekunden. Danach quittiert der SSH-Client die Verbindung mit seiner berüchtigten Meldung „Broken pipe“, und es ist eine erneute Anmeldung am SSH-Server nötig. Das macht die Verwendung von SSH auf Notebooks und Smartphones mit schwachem WLAN/3G/LTE unterwegs zu einem zähen Missvergnügen. Besser wird das mit Mosh („Mobile Shell“): Diese junge Ergänzung für SSH wurde vor zwei Jahren am Massachusetts Institute of Technology entwickelt.

Mosh macht mobil

Wartet stets auf den Client: Da Mosh mit dem zustandslosen Übertragungsprotokoll UDP arbeitet, gibt es keine Timeouts. Der Client bleibt auch bei ausbleibender Internetverbindung angemeldet.
Wartet stets auf den Client: Da Mosh mit dem zustandslosen Übertragungsprotokoll UDP arbeitet, gibt es keine Timeouts. Der Client bleibt auch bei ausbleibender Internetverbindung angemeldet.

An schlechter Konnektivität kann die Mosh nichts ändern, wohl aber besser damit arbeiten. Mosh nutzt dazu einige Tricks, um die Einschränkungen von SSH bei lausigen Verbindungen zu beseitigen, und ist um einen Bruch mit Konventionen nicht verlegen. Der erste Bruch: Mosh nutzt nicht vornehmlich TCP, sondern in beiden Richtungen den zustandslosen Gegenpart UDP (User Datagram Protocol) zur Datenübertragung, der sonst für Streaming, IP-Telefonie, Remote-Desktop-Verbindungen und vor allem Bittorrent zum Einsatz kommt. Der zweite Bruch: Das eigentliche SSH-Terminal, also die Kommandozeile, läuft nicht auf dem Client, sondern auf dem Server.

Der Client bekommt lediglich eine Übertragung des Terminals zu sehen. Der dritte Bruch: Da Mosh mit UDP arbeitet, kann die Verbindung beliebig lange offen bleiben, und der Client darf sogar seine IP-Adresse währenddessen ändern, was etwa beim Roaming eines Mobil-Clients über verschiedene Netze passiert.

Damit dies funktioniert, müssen Server und Client aber einige, wenn auch bescheidene Voraussetzungen erfüllen: Auf beiden Seiten muss Mosh installiert sein, auf dem Server muss Open SSH laufen. Zusätzlich zu SSH-Verbindungen über TCP muss die Firewall des Servers UDP-Verbindungen auf den Ports 60000 bis 61000 zulassen, und auch auf Client-Seite dürfen UDP-Pakete nicht blockiert werden. Auch gibt es gegenüber von SSH ein paar Einschränkungen: Mosh eignet sich für ein Terminal mit Kommandozeile, nicht aber für SSH-Tunnel, zur Dateiübertragung und zum Aufbau von Proxy-Verbindungen.

Genau wie SSH ist aber auch Mosh verschlüsselt und arbeitet mit dem Algorithmus AES und der akzeptablen Schlüssellänge von 128 Bit. Der offengelegte Quellcode gibt eine gewisse Versicherung, dass das mit rechten Dingen zugeht, wobei die AES-Verschlüsselung allerdings mit Hilfe der Open-SSL-Bibliothek erledigt wird.