Wer mal „schnell“ während einer Zugfahrt versucht hat etwas mittels einer mobilen UMTS- oder LTE-Datenverbindung und SSH auf einem Server zu managen, der wird meist nach zahlreichen Versuchen gefrustet aufgegeben haben. Erst wenn der Zug vor einem Bahnhof langsam durch die Stadt rollt, bekommt man eine stabile Internetverbindung und damit auch endlich die Möglichkeit endlich störungsfrei zu arbeiten. Während der Fahrt bricht einfach zu oft die Verbindung weg. Abhilfe schafft das für wechselnde und instabile Verbindungen geschaffene Mosh.
Mosh wurde als SSH-Ersatz für instabile (die Verbindung darf komplett abbrechen, man kann sogar den Rechner in den Standby schicken) , wechselnde (man kann eine Mosh-Verbindung mit UMTS starten und über ein WLAN wieder aufnehmen) und langsame Internetverbindungen (Tastatureingaben werden bevorzugt durchgeleitet) geschaffen. Also etwa für die User, die sich mit einer wackligen UMTS-Leitung per SSH auf einen Server verbinden möchten. Es gibt Mosh für Linuxe, Windows und Macs und natürlich auch für mobile Betriebssysteme. So kann man Mosh vom PC und vom Handy aus benutzen.
Mosh neben SSH auf dem Server installieren
Um Mosh zum Laufen zu bekommen, muss das Programm auf beiden Rechnern installiert werden. Auf dem Server muss natürlich noch zusätzlich SSH installiert sein, da SSH weiterhin zur Authentifizierung des Users und zum Verbindungsaufbau benötigt wird. Mosh krallt sich erst nach dem Aufbau der verschlüsselten Leitung die Kontrolle über die Kommunikation.
# Mosh unter Debian/Ubuntu installieren... $ sudo apt-get install mosh # Mosh unter Arch Linux installieren... $ sudo pacman -S mosh
Unter Ubuntu gibt es Mosh seit Precise ganz regulär in den Paketquellen, daher erspare ich mir Ausführungen über das Mosh-PPA. Dort gibt es allerdings aktuellere Versionen von Mosh, von daher könnte das PPA auch bei aktuelleren Ubuntus interessant sein. Arch-User finden Mosh ganz normal im Community-Repo. Und auch unter zahlreichen anderen Linuxen lässt sich Mosh ganz normal über die Paketquellen installieren, die Mosh-Homepage listet die Installationswege recht umfassend auf.
Mosh ohne Root-Rechte? Geht… vielleicht!
Problematisch wird es allerdings wenn man Mosh mit einem Server nutzen möchte, auf dem man zwar über ein SSH-Login verfügt, aber keine Root-Rechte hat. Mosh lässt sich in der Theorie ohne Root-Rechte — auch auf der Seite des Servers — betreiben, daher kann man sich Mosh auch selber kompilieren und beim Login ausführen. Mit install-user-mosh.sh findet ihr auch ein Skript, mit dem sich Mosh ohne große Aktion bauen lässt.
Allerdings braucht es zum erfolgreichen Bauen von Mosh eine lange Latte von Bibliotheken und Build-Tools, die wahrscheinlich nur auf wenigen Servern installiert sein dürften. Von daher solltet ihr lieber gleich beim Administrator des Servers anklopfen und lieb drum bitten doch schnell Mosh zu installieren. So wird das Programm sauber installiert, Sicherheitslücken geflickt und ihr müsst nicht groß basteln.
# Mosh auch ohne Root-Rechte installieren... $ wget https://gist.githubusercontent.com/ViViDboarder/11000123/raw/1b71e37006db1d7dfdf8c59e4ba111d73645bec1/install-user-mosh.sh $ chmod +x install-user-mosh.sh $ ./install-user-mosh.sh # Allerdings nur mit diesen Abhängigkeiten... $ sudo apt-get install g++ protobuf-compiler libprotobuf-dev libboost-dev libutempter-dev libncurses5-dev zlib1g-dev expect-dev libexpect-perl liblocales-us-perl liblocales locales-all liblocale-us-perl liblocales-perl git libssl-dev
Mit Mosh auf den Server verbinden
Wurde Mosh auf Server und Client installiert, kann man wie gewohnt seine SSH-Verbindung aufrufen. Im Normalfall ersetzt ihr einfach das „ssh“ vor dem Befehl mit einem „mosh“, die Angabe des Users und des Servers bleiben gleich. Ein bisschen aufwändiger wird es allerdings, wenn man seinen SSH-Server nicht wie üblich auf Port 22 laufen hat, in diesem Fall muss man den von SSH benutzten Port ein wenig umständlicher angeben.
# Mit Mosh zu einem SSH-Server verbinden... $ mosh du@dein.server.de # Mit Mosh zu einem SSH-Server auf Port 222 verbinden... $ mosh --ssh="ssh -p 222" du@dein.server.de
Ansonsten kann man nun genauso auf dem Server arbeiten, wie man es von SSH gewohnt ist — fast! Um Daten zu sparen überträgt Mosh immer nur die letzten Änderungen in der Shell. Was schon einmal übertragen wurde, wird noch nochmal auf den Server geschickt. Unter anderem deshalb funktioniert der Scrollback-Speicher nicht. Man kann also nicht mit Shift-PageUp/PageDown oder mit dem Mausrad die letzten Ausgaben der Shell hervorholen.
Mosh für Android und Chrome/Chrome OS
Wie schon mehrfach angesprochen ist Mosh natürlich ideal für mobile Geräte. Daher ist es auch nicht verwunderlich, dass es Mosh-Clients für Handys gibt — allerdings wohl nur für Android. Android-User können auf JuiceSSH zurückgreifen, ein SSH-Client für Android den ich schon mehrfach hier im Blog hatte. Die App kostet eine Kleinigkeit, sie ist aber definitiv ihr Geld wert. Mosh lässt sich dort in den Settings der Verbindung einstellen. Und auch für Chrome-, Chromium oder Chrome-OS-User gibt es eine Mosh-Browser-App, die sich direkt im Webbrowser ausführen lässt.
Kenne mosh jetzt auch schon etwas länger und kann es definitiv empfehlen!
Cool ist auch, dass mosh SSH zur Verbindung nutzt, man also an seinen Keys und so weiter gar nichts ändern muss. Einfach mosh [alias] statt ssh [alias] eintippen, feddich 🙂
Mosh ist auch super, wenn die Internetverbindung einfach nur voll ausgelastet ist.
Normales SSH wird da schon ziemlich zäh.
Ich hab Mosh neulich während einer Zugfahrt genutzt. Per Mosh auf meinen kleinen Rooti, wo irsii und mutt laufen. So konnte ich trotz wackliger verbindung alles machen. super!