Netzwerk und Internet

Mosh: Die mobile Shell mit Verbindungsschutz

19.04.2015 von David Wolski
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.

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.

Installation und erste Verwendung

Obwohl die stabile Version der Open-Source-Software Mosh erst 2013 erschien, haben sie die meisten Linux-Distributionen bereits im Repertoire. Man könnte sagen, es war Liebe auf den ersten Blick, da Linux-Anwender vergleichsweise oft in der Kommandozeile unterwegs sind.

Die Einrichtung ist deshalb nicht kompliziert. Mosh enthält sowohl die Server- als auch die Client-Komponente. Ab Debian 7 und Ubuntu 12.04 installieren Sie Mosh und, falls nötig, den SSH-Server mit diesem Befehl:

sudo apt-get install mosh opensshserver

Unter Fedora (ab Version 15) bekommen Sie beides als root oder mit vorangestelltem sudo über

yum install mosh openssh-server

und auch Open Suse ab 12.3 kennt die Pakete, die sich einfach mit dem Kommandozeilen-Paketmanager Zypper installieren lassen:

sudo zypper in mosh !!br0ken!!

Auf den Clients können Sie sich die Installation des Open-SSH-Servers sparen und brauchen nur Mosh zu installieren. Auch ist es nicht nötig, auf dem Server einen Mosh-Daemon oder Server-Prozess manuell zu starten, denn dies erledigt der Client von sich aus. Nur der SSH-Server muss laufen.

Mosh im Einsatz

Port-Weiterleitung für Mosh auf einem Router: Neben SSH auf Port 22 müssen Sie auch UDP-Netzwerkverkehr auf den Ports 60000 bis 61000 an den Ziel-Server im lokalen Netzwerk weiterleiten.

Den Mosh-Client verwenden Sie ähnlich wie den SSH-Client in einem Terminal-Fenster und bauen mittels

mosh [benutzername]@[servername/adresse]

eine Verbindung auf. Auf den ersten Blick gibt es nur wenig Unterschiede zu einer SSH-Session. Tatsächlich nimmt auch erst einmal der SSH-Server die Verbindungsanfrage entgegen und verlangt als Authentifizierung Benutzernamen und Passwort. Anmelden können sich alle Nutzer, die auch über SSH auf die Kommandozeile des Systems kommen.

Über diese SSH-Verbindung startet der Mosh-Client auf dem Server nun ein Remote-Terminal, das dann die Kommunikation zwischen beiden Stellen über UDP mit verschlüsselten Datagrammen übernimmt.

Die SSH-Verbindung wird ab jetzt nicht mehr gebraucht. Das Remote-Terminal streamt seinen Inhalt per UDP an den Client und wartet so lange auf dessen Eingaben, bis die Session manuell mit der Eingabe von logout oder mit der Tastenkombination Strg und D beendet wird.

Hinweise: Die UDP-Verbindung von Mosh läuft auf dem Server auf den Ports 60000 bis 61000, und falls ein Router per Portforwarding SSH und Mosh an einen Linux-Rechner im lokalen Netzwerk weiterleiten soll, dann vergessen Sie nicht, in den Router-Einstellungen neben Port 22 (TCP) von SSH auch den Portbereich 60000 bis 61000 (UDP) an die Rechner-IP weiterzugeben.

Falls SSH nicht auf dem üblichen Port 22 läuft, sondern etwa auf Port 2222, dann können Sie Mosh den SSH-Port für die initiale Verbindung mit dem Befehl

mosh [benutzername]@[servername/IP] --ssh="ssh -p 2222"

direkt mitteilen. Mehr englischsprachige Dokumentation gibt es auf der Projekt-Webseite unter https://mosh.mit.edu/#faq.

App Mosh-Client für Android

Natürlich läuft nicht auf jedem mobilen Gerät eine ausgewachsene Linux-Distribution mit gut sortierten Paket-Repositories, in der sich der offizielle Mosh-Client findet. Aber Android-Smartphones und Tablets müssen nicht zurückstehen: Für Google Android empfiehlt sich die kostenlose App Juice SSH, die als Client neben SSH auch mit Mosh umgehen kann.

(PC-Welt/ad)