My Love - Mosh

  flora   Lesezeit: 5 Minuten  🗪 2 Kommentare

Bei hohen Latenzen oder Verbindungsunterbrechungen kann SSH richtig weh tun. Wer auch im Funkloch nicht auf die Remote Shell verzichten möchte, braucht deswegen unbedingt Mosh!

my love - mosh

Ich habe richtig oft richtig schlechtes Internet. Ständig nutze ich irgendein hoffnungslos überlastetes Wifi oder meine notorisch gedrosselte Mobilfunkverbindung. An die meisten Dienste ist in diesen Situationen ohnehin nicht zu denken, aber am meisten macht es mich fertig, dass ich dann kein SSH benutzen kann. Meine Befehle tauchen im Schneckentempo auf dem Bildschirm auf, das Warten auf jedes einzelne Zeichen zerrt an meinen Nerven und die sonst so wundervolle Reaktivität des Terminals ist dahin. "Das kann doch nicht so schwer sein! Das ist doch nur Text!" fluche ich dann. Aber mit Mosh sind diese Probleme vergessen.



Mosh steht für "Mobile Shell" und ist ein Ersatz für SSH. Mosh bringt verschiedene Vorteile mit sich, zum Beispiel eine deutlich geringere Latenz bei der Bedienung. Während SSH jedes Zeichen und jede Eingabe einzeln über eine TCP Verbindung überträgt und jeweils erst dann anzeigt, wenn die Übertragung erfolgreich war, gibt Mosh direktes Feedback. Wenn man "a" auf der Tastatur drückt, dann erscheint auch sofort ein "a" auf dem Bildschirm, um die Übertragung per UDP wird sich dann im Hintergrund gekümmert. Damit das funktioniert, stellt Mosh Vermutungen darüber an, wie der Bildschirm nach der nächsten Eingabe aussehen wird. Das ist eine Technik namens "Speculative Local Echo". Alle Vermutungen, die der Client über den Status des Bildschirms anstellt, werden dann bei Gelegenheit mit dem realen Status abgeglichen und ggf. korrigiert. Selbst wenn die Kommunikation mit dem Server ihre Zeit braucht, fühlt sich das tippen also nicht mehr so schneckig an. Über eine 3G Verbindung haben die Entwickler bei SSH im Mittel eine Latenz von 503 ms gemessen, Mosh hingegen liegt bei unter 5ms. Allein das wäre für mich schon Grund genug gewesen SSH für immer den Rücken zu kehren, doch Mosh hat noch mehr zu bieten.

Durch das "State Synchronization Protocol" und die Verwendung von UDP kommt Mosh gut damit zurecht, wenn es mal für eine Weile keine Konnektivität gibt. Eine Leiste am oberen Rand zeigt dann eine Meldung wie "Last contact 03:13 ago." an. Und sobald es wieder Internet gibt, wird die Sitzung fortgesetzt als wäre nichts gewesen. Der Mosh Client synchronisiert dann den Status wieder mit dem Server und hat nicht einmal die letzten Zeichen vergessen, die wir eingegeben haben. Und das Beste ist: Das funktioniert sogar, wenn wir die IP-Adresse wechseln. Wir können also bedenkenlos zwischen mehreren Netzen mit unterschiedlichen Adressen roamen, unserem Terminal geht es dabei die ganze Zeit gut. Besonders mächtig wird das in Kombination mit einem Terminal-Multiplexer wie tmux oder screen.

Tipp: Möchte man die Sitzung verlassen während man gerade keine Konnektivität zum Server hat, kann man dies tun, indem man "Strg+6" drückt und dann entweder "Strg+z" um Mosh zu pausieren oder "." um Mosh zu beenden.

Und auch bei den Details gibt Mosh sich Mühe und bügelt einige Fehler aus, an die man sich bei der Nutzung von SSH fast schon gewöhnt hat. So führt das von Mosh verwendete Protokoll dazu, dass das "Prozess beenden" mit "Strg+C" immer funktioniert. Außerdem arbeitet Mosh ausschließlich mit UTF-8 und gibt das Versprechen auch bei der Ausgabe ungewöhnlicher Zeichen niemals in einen unbedienbaren Zustand zu verfallen.

Aber genug der Schwärmerei - kommen wir zu den harten Fakten. Was muss ich denn jetzt tun wenn ich Mosh benutzen will? Die Antwort lautet: nicht viel! Mosh steht bei den meisten geläufigen Distributionen in den Paketquellen zur Verfügung. Ich als Debian Userin mache also z.B. auf meinem Server und meinem Client jeweils einmal

sudo apt install mosh

und schon kann es losgehen. Um die Authentifizierung muss ich mir an diesem Punkt keine Gedanken mehr machen, denn Mosh verwendet SSH, um die Sitzung herzustellen. Ich kann also einfach

mosh flora@example.com

in mein Terminal schreiben und Mosh verbindet sich zunächst ganz klassisch per SSH mit meinem Server. Wenn ich in der Datei ~/.ssh/config schon eine Authentifizierung per SSH-Schlüssel konfiguriert habe, wird automatisch davon gebraucht gemacht. Mosh startet dann auf dem entfernten System den Mosh-Server und kontaktiert diesen per UDP. Die SSH Verbindung wird dann wieder beendet und wir kommunizieren nun über das Mosh Protokoll. Hurra!

Tipp: Falls wir keine administrativen Berechtigungen auf dem System haben ist das gar kein Problem. Mosh benötigt keine Root-Rechte. Wir können uns Mosh also auch einfach selbst kompilieren und direkt aus unserem Home-Verzeichnis starten. Die mosh-server Executable legen wir dann auf dem entfernten System ebenfalls in unserem Homeverzeichnis ab und geben deren Pfad beim Aufruf des Clients über das Argument "--server" an. Also z.B. "mosh --server=/home/flora/mosh-server flora@example.com"

Der Umstieg ist also super einfach, so kann man Mosh auch ohne großen Lern- und Konfigurationsaufwand eine Chance geben. Bei der nächsten Bahnfahrt wird es sich auf jeden Fall bemerkbar machen.

Zu guter Letzt noch der Hinweis auf die Lizenz, auch wenn es keine Überraschung ist, will ich es natürlich nicht unerwähnt lassen: Mosh ist unter der GNU General Public License v3.0 lizenziert, es handelt sich also um freie Software. We love to see it!

Quelle: https://mosh.org/

kaligule
Geschrieben von kaligule am 15. Dezember 2022 um 20:29

Klingt richtig gut.

Peter V.
Geschrieben von Peter V. am 15. Dezember 2022 um 20:41

Mosh und Windows (für solche, die auch noch auf Windows unterwegs sind ...)

https://ideawrights.com/mosh-windows-wsl/

Setting up Windows

The recommended way to install mosh on Windows is simply to install the mosh extension for Chrome. I tried this and it’s fairly miserable compared to a true mosh client on a Linux machine. Fortunately, Windows now is a Linux machine for all practical purposes which means you can run the Linux version of mosh. Unfortunately, this can take a bit of setup.

Install the Windows Subsystem for Linux ...