Möchten Sie von unterwegs auf entfernte Rechner zugreifen, erspart Ihnen Mosh lästige Abbrüche und Verzögerungen.
Wer sich unter Linux regelmäßig auf der Kommandozeile bewegt, der hat dafür unter Umständen schon einmal einen abschätzigen Kommentar seiner Umwelt kassiert. Von “schwarzen Fenstern mit weißer Mini-Schrift” ist schnell die Rede, und von der “Computersteinzeit”. Tatsächlich wirkt die Shell vor dem Hintergrund moderner, bunter und leistungsfähiger Desktop-Umgebungen wie aus der Zeit gefallen.
Da verwundert es wenig, dass sich viele Benutzer nicht die Mühe machen, den Umgang mit der Konsole zu erlernen – eine Notwendigkeit dafür besteht auf modernen Linux-Systemen jedenfalls nicht mehr. Wer aber den Umgang mit der Shell erst einmal beherrscht, der mag bald nicht mehr auf die Konsole verzichten: Viele Arbeitsschritte, die in grafischen Oberflächen zahllose Klicks erfordern, lassen sich auf der Kommandozeile in wenigen Sekunden erledigen.
Möchten Sie auf Rechner in der Ferne zugreifen, um dort Aufgaben auszuführen, reduzieren sich die Wahlmöglichkeiten ohnehin oft auf die Kommandozeile als einzige Option. Oft ist die Leitung nicht schnell genug, um einen grafischen Desktop per VNC in erträglicher Geschwindigkeit zu übertragen.
Mühsame Verbindung
Der geringe Datenverkehr, den eine SSH-Verbindung produziert, stellt hingegen für die meisten Leitungen kein Problem dar. Allerdings gelten selbst für dieses Protokoll gewisse Einschränkungen, und zwar besonders dann, wenn die genutzte Leitung unzuverlässig ist oder unter sehr hohen Latenzen leidet.
Das Fernwarten per Secure Shell gerät dann schnell zur echten Geduldsprobe: Tippen Sie etwas ein, erscheint es erst Sekunden später wirklich im Terminal, wenn überhaupt. Befindet sich der ICE, in dem Sie gerade sitzen und tippen, in einem Funkloch, bricht die Verbindung im schlimmsten Fall ganz weg, und Sie beginnen von vorne.
Wer solche Probleme kennt, sollte sich mit dem kleinen, aber feinen Werkzeug Mosh [1] beschäftigen, denn der Name steht für mobile Shell. Das Programm richtet sich an genau jene Anwender, die die Secure Shell oft unterwegs und über unzuverlässige Netzwerkverbindungen nutzen.
Zusammenhänge
Das Wichtigste vorab: Mosh fungiert als eine Art Überbau für SSH, zumindest für den ersten Start benötigt es unbedingt eine solche Verbindung. Ganz konkret funktioniert das so: Zunächst verbindet sich Mosh mittels SSH mit dem Zielsystem. Dort startet der Client-Teil der Software einen eigenen Server, der danach auf einem Netzwerkanschluss (Port) mittels UDP-Protokoll lauscht.
Die weitere Kommunikation zwischen Client und Server nutzt ausschließlich diese Verbindung. Bedenken bezüglich der Sicherheit müssen Sie hier allerdings nicht hegen, denn wie die SSH verschlüsselt auch Mosh die an den Server geschickten Befehle. Sie wandern also nicht im Klartext durchs Netz.
Drei Funktionen heben das Werkzeug vom klassischen SSH ab: Mosh hat kein Problem damit, wenn der Client oder der Server die IP-Adresse ändert – im Fachjargon heißt dieser Vorgang Roaming. In diesem Fall macht sich die Software eine in UDP vorhandene Eigenschaft zunutze, bei der der Client dem Server über ein spezielles Paket die neue IP-Adresse mitteilt – schon klappt alles wie zuvor. Herkömmliche SSH-Verbindungen überleben den Austausch der IP-Adresse auf einer der Seite dagegen nicht.
Das UDP-Protokoll ermöglicht es außerdem, eine einmal aufgebaute Verbindung zum Server selbst dann aufrechtzuerhalten, wenn sich einer der beiden Kommunikationspartner zeitweise vom Netz trennt. SSH basiert auf TCP/IP, das zwar eine begrenzte Anzahl von Malen versucht, Pakete erneut zu übermitteln (“retransmit”) – erhält das Protokoll darauf aber keine Antwort, beendet es die Kommunikation komplett. UDP hingegen basiert auf dem Prinzip von “fire and forget”, ein Nachverfolgen von Verbindungen findet also nicht statt. Geht ein Client während einer Mosh-Sitzung offline und danach wieder online, nutzt es dieselbe UDP-Verbindung wie zuvor.
Besonders praktisch ist aus Sicht des Anwenders ein drittes Feature, nämlich das Verringern der vom Nutzer wahrgenommenen Latenz. Wer häufig über langsame SSH-Verbindungen Rechner aus der Ferne wartet, kennt das: Man tippt etwas ins Terminal, doch die eingegebenen Inhalte erscheinen dort unter Umständen erst Sekunden später.
Die Secure Shell etwa zeigt die Eingabe auf dem entfernten System erst an, wenn diese via Netzwerk dort vollständig ankommt. Mosh hingegen ist darauf ausgelegt, die Eingabe direkt anzuzeigen, sodass nicht das Gefühl entsteht, ständig mit Latenz zu kämpfen.
Aller Anfang
Es fällt nicht schwer, den Einstieg in die Arbeit mit Mosh zu finden, denn es liegt praktisch allen gängigen Distributionen und den meisten anderen Unix-Abkömmlingen bei. Sie installieren die Software sowohl auf dem lokalen wie auf dem entfernten Rechner, denn der Client startet auf dem Zielsystem direkt nach dem Login per SSH die Server-Komponente.
Das setzt voraus, dass das Binary mosh-server auf dem Zielrechner in einem Pfad liegt, den die Umgebungsvariable PATH abdeckt. Alle gängigen Distributionen legen den Server in /usr/sbin oder in /usr/local/sbin ab. Installieren Sie Mosh also mittels eines Pakets, brauchen Sie sich um dieses Problem keine Gedanken zu machen.
Auf einem OpenSuse-System starten Sie zur Installation mit [Alt]+[F2] und der Eingabe von konsole eine Kommandozeile und tippen den Befehl sudo zypper in mosh ein. Alternativ öffnen Sie YaST für die Installation und wählen dort das Paket mosh (Abbildung 1). Der Name des Pakets lautet übrigens auf allen gängigen Distributionen gleich; auch unter Ubuntu, Fedora oder auf anderen Systemen richten Sie also mosh ein.

Abbildung 1: Unter OpenSuse stehen Pakete von Mosh bereit, die Sie per YaST oder Zypper schnell installieren (oben). In Ubuntu gehört die Mobile Shell ebenfalls zum Lieferumfang der Distribution (unten).
Eine Frage des Clients
Im Folgenden gehen wir davon aus, dass Client und Server auf dasselbe Betriebssystem setzen, konkret OpenSuse. Das muss aber nicht so sein. Möglich wäre etwa, dass ein Server auf einer älteren Enterprise-Distribution wie Suse Linux Enterprise Server (SLES) oder Red Hat Enterprise Linux (RHEL) aufsetzt.
Diese Distributionen finden sich auf Desktop-Systemen hingegen nie, und oft genug handelt es sich beim genutzten Client noch nicht einmal um Linux. Kein Grund zur Sorge: Den Mosh-Client gibt es für eine ganze Reihe von Systemen, auch für MacOS X, Windows und mobile Betriebssysteme. Unter Android stellt beispielsweise die App JuiceSSH Mosh-Funktionen bereit [2], unter iOS hilft Blink Shell dem Admin aus der Patsche. Grundsätzlich gilt, dass Mosh auf quasi jedem aktuellen Betriebssystem läuft.
Etwas kniffliger ist es allerdings, Mosh auf den Server zu bekommen: Vielen gängigen Enterprise-Distributionen liegt die Software zwar bei, doch meist in einer Version direkt aus der Steinzeit. Die Wahrscheinlichkeit, dass ein aktueller Client mit einer veralteten Server-Komponente gut und zuverlässig funktioniert, hält sich in engen Grenzen. Erschwerend kommt hinzu, dass Sie als Nutzer möglicherweise nicht auf jedem Server Root-Rechte haben.
Dann ist im schlimmsten Fall Handarbeit angesagt: Sie übersetzen das Programm aus den Quellen. Dazu genügt der übliche Dreischritt aus configure, make und make install zum Erzeugen der Software [3]. Beim Übersetzen sollten Sie configure jedoch den Parameter --prefix=$HOME/mosh mit auf den Weg geben. Danach landet das Programm für den Server im entsprechenden Verzeichnis als $HOME/mosh/bin/mosh-server.
Stellen Sie anschließend sicher, dass dieses Verzeichnis in der Umgebungsvariable PATH auftaucht, indem Sie die Konfiguration der Shell anpassen. Dazu genügt je nach Distribution ein einfacher Export in einer der Dateien $HOME/.bashrc oder $HOME/.bash_profile:
$ export PATH=$PATH:~/mosh/bin
Anschließend vermag der Client beim Login mosh aufzurufen und auf diese Weise den Server zu starten (Abbildung 2).

Abbildung 2: Bei Bedarf installieren Sie auf dem Server Mosh von Hand, was auch ohne Root-Rechte klappt. Über die Umgebungsvariable $PATH verweisen Sie anschließend auf das Binary.
Die erste Verbindung
Es ist sehr leicht, die erste Verbindung aufzubauen: Der Befehl aus der ersten Zeile von Listing 1 baut die Kommunikation zum Server auf. Klappt das, passieren direkt im Anschluss verschiedene Dinge: Zunächst landen Sie in einer normalen Shell-Sitzung, die sich von einer über die Secure Shell äußerlich nicht unterscheidet. Die Eingabe von w auf dem entfernten Server zeigt jedoch, dass es sich eben nicht um eine solche handelt: Hinter dem eigenen Benutzernamen steht dort nun via mosh. Rufen Sie den Befehl ps x auf (Abbildung 3), so findet sich dort zudem ein mosh-server – ebenfalls ein sicherer Indikator dafür, dass die Mobile Shell aktiv ist.
Listing 1
$ mosh Server $ mosh mloschwitz@Server $ mosh --ssh="ssh -i /home/martin/id_rsa -p 2222" Server

Abbildung 3: Nach dem Login per Mosh erscheint in der Übersicht der Prozesse der mosh-server, den der Client automatisch startet.
Ob die Software wie gewünscht funktioniert, testen Sie danach mit Bordmitteln: Ziehen Sie einfach das Netzwerk-Kabel des Computers oder schalten Sie das WLAN ab, um die aktive Verbindung zu unterbrechen. Währenddessen sollte es möglich sein, weiterhin im Fenster der Shell zu tippen. Sobald Sie das Netzwerk reaktivieren, sendet die Software die Daten an den Server.
Zusätzliche Parameter
Das folgende Beispiel geht davon aus, dass Sie sich am entfernten System mit demselben Benutzernamen anmelden, den Sie auf dem lokalen System nutzen. Heißt der lokale Benutzer martin, so würde der Befehl aus der ersten Zeile von Listing 1 die Verbindung zum Server aufbauen und zum Anmelden am entfernten System per SSH den gleichen Benutzernamen nutzen. Verwenden Sie auf dem Server einen anderen Benutzernamen, fügen Sie ein Benutzer@ vor den Namen des Hosts ein (zweite Zeile).
Etwas komplizierter gestaltet sich die Situation, wenn die SSH-Verbindung zum Server nicht den üblichen Anforderungen entspricht. Viele Server erlauben etwa kein Login per Passwort, sodass zwingend ein Schlüssel zum Einsatz kommt. Nutzen Sie keinen SSH-Agent [4] für diese Aufgabe, dann geben Sie beim Aufruf über -i den Pfad zum Schlüssel an, den Sie nutzen möchten.
Auf manchen Servern läuft der SSH-Dienst auf einem anderen Port als dem Standard-Port 22. Für solche Probleme kennt die Mosh den Parameter --ssh, der als Argument einfach die Befehlszeile der Secure Shell übernimmt. Der Befehl aus der dritten Zeile von Listing 1 nutzt den Key /home/martin/id_rsa und kontaktiert den Server auf Port 2222.
UTF-8
Vielleicht erinnern Sie sich noch an die Zeit, in der es in Chaträumen im Internet regelmäßig Rüffel hagelte, weil der Unicode-Zeichensatz UTF-8 im Fenster der Konsole auftauchte. Mittlerweile nutzen die gängigen Desktop-Distributionen allesamt UTF-8, ebenso die aktuellen Server-Distributionen.
Haben Sie es auf einer Seite allerdings mit einem älteren System zu tun, finden sie dort möglicherweise noch das alte und mittlerweile eigentlich verpönte ISO-Format vor – ein Problem für Mosh, das zwingend auf UTF-8 angewiesen ist. Das Werkzeug meint es dabei durchaus ernst: Findet es auf dem Server oder Client UTF-8 nicht vor, verweigert es kurzerhand den Dienst.
Es gibt aber eine Möglichkeit, das Problem zu umgehen: Der Befehl locale zeigt an, welcher Zeichensatz aktuell zum Einsatz kommt; für deutsche Anwender sollte das de_DE.UTF-8 sein. Verwendet der Client etwas anderes, korrigieren Sie zunächst diesen Umstand. Die Konfigurationswerkzeuge der Desktop-Distributionen sehen hierfür meist sogar einen eigenen Eintrag vor. Ansonsten hilft ein kurzer Ausflug auf die Kommandozeile weiter.
Auf dem Server setzt die Software ebenfalls eine UTF-8-kompatible Locale voraus. Findet sie eine solche vor, die aber nicht als Standard dient, dann sorgen Sie mit dem Parameter --server="LANG=de_DE.UTF-8 mosh-server" dafür, dass das Tool auf dem entfernten System vor dem Start des Mosh-Servers die Locale auf UTF-8 setzt. Der beschriebene Weg betrifft übrigens nur Mosh: Alle anderen Programme nutzen weiter denselben Zeichensatz wie zuvor.
Beim sturen Beharren der Entwickler auf UTF-8 handelt es sich übrigens keineswegs um einen Selbstzweck. Sie begründen ihre Wahl damit, dass UTF-8 der einzige Zeichensatz ist, der plattformübergreifend und unabhängig vom genutzten Terminal-Emulator problemlos funktioniert. Was zunächst Mühe bereitet, führt letztlich also dazu, dass Mosh besser und zuverlässiger arbeitet.
Schattenseiten
Bei allen Vorteilen, die Mosh mitbringt, wirkt sich unter Umständen negativ aus, dass es nicht alle SSH-Funktionen bietet – möglicherweise vermissen Sie manches Feature. Die Software eignet sich nicht in derselben Art und Weise für jede Situation – etwa, wenn eine Firewall im Netzwerk zwischen Client und Server liegt.
Die Entwickler haben Mosh darauf ausgelegt, dass der Mosh-Server auf dem Zielsystem auf einem UDP-Port des Bereichs 60000 bis 61000 startet. Das klappt nur, wenn eine Firewall den Zugriff auf diese Port-Range erlaubt. Viele Systeme basieren jedoch auf der Annahme, dass nur jene Ports offenstehen dürfen, die ein Dienst explizit benötigt; alle anderen nageln sie dann zu.
Haben Sie als Administrator Zugriff auf die betroffene Firewall, dann öffnen Sie den entsprechenden Port-Bereich von Hand. Firewall-Admins haben mit diesem Vorgehen naturgemäß allerdings ihre Probleme, weil sich von Mosh im Moment nicht genutzte Ports trotzdem erreichen lassen.
Immerhin besteht die Möglichkeit, das Tool per Parameter auf der Kommandozeile für eine einzelne Verbindung auf einen bestimmten UDP-Port zu legen, sodass Sie keine klaffenden Lücken in die Firewall zu reißen brauchen. Dasselbe gilt übrigens für Systeme, die hinter NAT-Servern stehen und bei denen Port-Forwarding für SSH eingerichtet ist: Hier müssen Sie ebenfalls die benötigten UDP-Ports zum Zielsystem schleusen.
Terminal-Scrollback
Lästigerweise besitzt Mosh aktuell keine Funktion für das Scrollback von Inhalten in der Konsole. Verschiedene Terminals beherrschen diese Fähigkeit, die das Tool allerdings konsequent ausblendet. Version 1.3 hätte eine entsprechende Funktion bieten sollen, doch bisher ist davon nichts zu sehen.
Immerhin gibt es Abhilfe: Falls Sie Mosh in Kombination mit Scrollback benötigen, greifen Sie zu Terminal-Werkzeugen wie Screen oder Tmux, die mit Mosh kompatibel sind. Die bieten dann eigene Funktionen für das Zurückblättern in der Historie.
Agent-Forwarding
SSH bietet sowohl Forwarding von SSH-Agents als auch Forwarding von X11 für grafische Werkzeuge. Beides erweist sich im Alltag als sehr praktisch: Wer per SSH zunächst einen Host erreicht, um von dort zu einem anderen weiterzuspringen, erspart sich durch das Forwarding des Agents das wiederholte Eintippen von Passwörtern und den Betrieb mehrerer Agents.
Wer einen SSH-Agent nutzt, meldet sich bei seinen Systemen per Schlüssel und nicht per Passwort an. Durch Agent-Forwarding greift diese Funktion durch andere Systeme hindurch, was gerade in Sachen Sicherheit relevant ist: Der private Schlüssel liegt dann nur einmal auf dem lokalen System und nicht wild auf den Rechnern verteilt. Viele Setups setzen so sehr auf Forwarding, dass sie das Login via Passwort komplett abschalten.
X11-Forwarding spielt oft ebenfalls eine wichtige Rolle: Dabei verbinden Sie sich per SSH so mit einem entfernten System, dass sich dessen grafische Programme auf dem lokalen Bildschirm anzeigen lassen.
Die schlechte Nachricht: Weder SSH- noch X11-Forwarding gehören zu den von Mosh aktuell unterstützten Funktionen. Sind Sie also auf eine dieser Techniken angewiesen, eignet sich das Tool nicht für Ihre Zwecke. IPv6 beherrscht die Software dagegen mittlerweile problemlos.
Fazit
Auf den ersten Blick ergibt eine Software wie die Mobile Shell sehr viel Sinn: Wackelige Verbindungen über drahtlose Netze gibt es genug. Roaming zwischen den Netzen erweist sich als nützlich für alle, die permanenten Zugriff benötigen. Selbst auf den zweiten Blick punktet die Software mit gepufferten Eingaben, die das lästige Hängen des Prompts kompensieren.
Allerdings weist Mosh in einigen sehr zentralen Bereichen noch Defizite auf. Gerade das Forwarding gehört bei professionellen Installationen oft zum täglichen Geschäft. Hier haben die Entwickler noch einige Arbeit vor sich, bevor das Tool in der ersten Liga mitspielen kann.
Infos
-
Mobile Shell: https://mosh.org
-
JuiceSSH: https://juicessh.com
-
Mosh kompilieren: https://github.com/mobile-shell/mosh/wiki/Build-Instructions
-
SSH-Forwarding: Andreas Bohle, “Aufgeschlossen”, RPG 05-06/2018, S. 20, http://www.raspi-geek.de/40977





