Im direkten Vergleich
| SSH | Mosh | |
|---|---|---|
| Transport | TCP, meist Port 22 | SSH zur Anmeldung, dann UDP |
| Netzwechsel oder geänderte Client-IP | Sitzung bricht ab | Sitzung läuft weiter |
| Tippen auf einer langsamen Verbindung | Wartet auf den Server | Zeigt die Eingabe lokal an und gleicht sie mit dem Server ab |
| Nötig auf dem Server | sshd | sshd und mosh-server. Root ist nicht nötig |
| Scrollback | Übernimmt Ihr Terminal | Nur der sichtbare Bildschirm wird synchron gehalten |
| Port-, Agent- und X11-Weiterleitung | Ja | Nein |
| Dateien kopieren, Skripte | scp, sftp, ssh host command | Nicht dafür gedacht. Es ist für interaktive Terminals |
Wie es sich in der Praxis verhält
Wir haben eine Mosh-Sitzung geöffnet, den Client-Container 6 Sekunden vom Netz genommen und wieder angeschlossen. Mosh zeigte oben eine Leiste mit Last reply 10 seconds ago. [To quit: Ctrl-^ .]. Danach lief die Sitzung in derselben Shell weiter, und ein anschließend eingegebener Befehl lief normal.
Eine einfache SSH-Sitzung endet in einer solchen Lage, wenn das Netz lange genug wegbleibt oder sich Ihre IP-Adresse ändert. Siehe Broken pipe und Keepalive.
Installation
Mosh muss auf Ihrem Rechner und auf dem Server installiert sein:
sudo apt-get install mosh # Debian, Ubuntu
brew install mosh # macOS with Homebrew
Die UDP-Ports öffnen
mosh-server nimmt den ersten freien UDP-Port ab 60001. In unserem Test war es 60001. Öffnen Sie den Bereich in der Firewall des Servers, zum Beispiel mit ufw:
sudo ufw allow 60000:61000/udp
Führen Sie nur wenige Sitzungen aus, genügt ein kleinerer Bereich. Leiten Sie TCP 22 an einem Router weiter, um den Server zu erreichen, leiten Sie auch diese UDP-Ports weiter. Die Website von Mosh nennt eine Firewall, die UDP blockiert, als Ursache, wenn vom Server nichts ankommt.
Verbinden
mosh user@server
mosh --ssh="ssh -p 2222" user@server
mosh -p 60001 user@server
Mit --ssh geben Sie einen anderen SSH-Port an, mit -p wählen Sie den UDP-Port. -p ändert den SSH-Port nicht. Um eine Sitzung zu beenden, die nicht mehr reagiert, drücken Sie Ctrl+^ und dann ..
Grenzen, mit denen Sie rechnen sollten
- Kein Scrollback. Mosh synchronisiert nur den sichtbaren Bildschirm. Mosh selbst rät, tmux oder screen auf dem Server für den Verlauf zu nutzen. Siehe den tmux-Spickzettel. Wie Sie nach dem Schließen des Clients zur selben Shell zurückkehren, steht unter SSH-Sitzungen mit tmux am Leben halten.
- Keine Weiterleitung. Brauchen Sie gleichzeitig einen Tunnel, öffnen Sie ihn mit einem separaten
ssh-Befehl. - Nur UTF-8. Bei einer Nicht-UTF-8-Locale bricht
mosh-servermitmosh-server needs a UTF-8 native locale to run.ab. Prüfen Sielocaleauf beiden Seiten. - UDP muss durchkommen. Netze, die nur TCP erlauben, funktionieren nicht.
- Kein Schutz vor einem Neustart.
mosh-serverist ein gewöhnlicher Prozess auf dem Server, ein Neustart beendet ihn also.
Die Sicherheit der Sitzung stammt laut der Mosh-Website von einem Schlüssel, den SSH zu Beginn austauscht, danach wird der Verkehr mit AES-128 im OCB3-Modus verschlüsselt und authentifiziert.
Fragen
Ist Mosh schneller als SSH?
Nicht beim Durchsatz. Mosh wirkt auf langsamen Leitungen schneller, weil es Ihre Eingabe sofort zeigt. Für Dateikopien oder Tunnel ist SSH das Werkzeug.
Welche Ports nutzt Mosh?
Es meldet sich per SSH an, meist über TCP-Port 22, und nutzt dann einen UDP-Port zwischen 60000 und 61000 auf dem Server, beginnend bei 60001.
Ersetzt Mosh SSH?
Nein. Mosh nutzt SSH, um sich anzumelden und mosh-server zu starten. Für Dateikopien, Port-Forwarding und Skripte bleiben Sie bei SSH.
Was bedeutet mosh did not make a successful connection?
UDP von Ihrem Rechner erreicht mosh-server nicht. Die Meldung endet mit Please verify that UDP port 60001 is not firewalled and can reach the server. Öffnen Sie 60000:61000/udp auf dem Server und in der Firewall Ihres Anbieters, und prüfen Sie, ob Ihr Netz UDP durchlässt.