# Mosh (Software)

Mosh (mobile shell) ist ein Computerprogramm, welches benutzt wird, um lokal eine entfernte Kommandozeile verfügbar zu machen. Mosh ähnelt SSH, hat aber weitere Funktionalitäten, um die Verwendung für mobile Nutzer zu verbessern. Die Hauptfunktionen sind:
* Mosh hält die Verbindung aufrecht, auch wenn der Benutzer „roamt“ und eine andere IP-Adresse erhält, beispielsweise wenn der Benutzer eines WLAN in ein anderes WLAN wechselt oder von WLAN zu UMTS wechselt.
* Mosh hält die Verbindung offen, wenn ein Benutzer die Internetverbindung verliert oder stellt den Client in einen „Schlafmodus“. SSH kann seine Verbindung verlieren, da TCP Pakete verwirft, wenn der Sender nach einer bestimmten Zeit (Timeout) keine Bestätigung erhält; die Terminalsitzung mitsamt den in ihr ggf. laufenden Programmen sind in diesem Fall beendet, soweit sie nicht durch besondere Vorkehrungen, etwa Verwendung von screen, bewahrt wurden.
* Mosh versucht, dem Benutzer sofort zu zeigen, welche Tasten er getippt hat und welche Buchstaben und Wörter er gelöscht hat, um die Latenz auszugleichen.
Die Hauptnachteile von Mosh sind die zusätzlich an den Server gestellten Anforderungen und dass manche Zusatzfunktionen von SSH nicht verwendet werden können.

## Unterstützte Plattformen

Mosh ist für die meisten Linux-Distributionen, macOS, NetBSD, FreeBSD und OpenBSD, Android, Solaris und Cygwin verfügbar. Für iOS stellte bis 2015 die Applikation iSSH eine unabhängige Implementation von Mosh zur Verfügung. Inzwischen gibt es mit Blink einen Nachfolger. Mosh unterstützt IPv6 ab Version 1.2.5.

## Nachteile
### Anforderungen an den Server

Der Hauptnachteil von Mosh ist, dass es im Vergleich zu ssh zusätzliche Anforderungen an einen Server stellt, denn es benötigt aufgrund seines Designs vollen UDP-Zugriff auf den Server. Auf Servern, die diese Anforderung nicht erfüllen, kann Mosh nicht eingesetzt werden. Beispiele dafür sind Systeme hinter Firewalls, die nur den ssh-Port via TCP freigeben. Problematisch sind auch Server, die nur indirekt erreichbar sind. Während man dies bei ssh mit der Option „ProxyCommand“ lösen kann, wird dies von Mosh nicht unterstützt.

### Ein Port pro Verbindung

Standardmäßig versucht der Mosh-Server pro Verbindung den ersten freien UDP-Port aus dem Range 60000–61000 zu belegen. Diese dynamische Port-Nutzung wird in Bezug auf eine saubere Firewallkonfiguration als sicherheitsrelevanter Nachteil angesehen. Firewalls versuchen in der Regel Verbindungen zu tracken (sogenanntes Stateful Filtering), welches auf SYN/ACK flags im TCP basiert, UDP-Pakete haben jedoch solche Flags nicht. Workarounds:
* Pro Verbindung kann der UDP-Port gesetzt werden, so dass es ausreicht, eine geringe Anzahl an Ports freizugeben.
* Deep Packet Inspection Firewalls und Application Firewalls können eingesetzt werden, um eine inhaltliche Analyse des Datenverkehrs zu machen.

### Terminal Scrollback und output drops

Scrollback wird bislang nicht unterstützt – sofern ein Terminal-Emulator mit Scrollbars eingesetzt wird, dann werden diese ausgeblendet. Diese Funktion ist für das Release 1.3 eingeplant. Ein Workaround ist derzeit, dass Mosh in Verbindung mit Screen oder tmux eingesetzt wird, die eine eigene Scrollback-Funktionalität mitbringen.

### SSH-Agent-Forwarding

SSH-Agent-Forwarding wird bislang nicht unterstützt.

### X11-Forwarding

X11-Forwarding wird bislang nicht unterstützt.