12.01.2016

MOSH: Trotz Serverentfernung top Verbindung

So mancher hat die Zeit «zwischen den Jahren» sicher nicht nur mit Besinnlichkeit, Familie und Feiern verbracht, sondern vermutlich die Finger doch nicht von der IT lassen können. Vielleicht erging es dem Einen oder Anderen dabei ja wie dem Autor dieser Zeilen, der in seiner Ferienwohnung am Meer unter ständig abbrechenden SSH-Verbindungen zu seinen Servern litt. Diesem Mangel konnte aber mit MOSH abgeholfen werden.

Von: Lars Behrens   Drucken Teilen   Kommentieren  

Lars Behrens, Dipl.-Paed

Lars Behrens ist Geschäftsführer der Firma MaLiWi IT. Staatlich geprüfter Netzwerkadministrator, Microsoft MCP/Linux LCP. Er hat langjährige Erfahrung in der Beratung bei Planung und Einrichtung von IT-Systemen und Netzwerken und dem Support heterogener Systeme (Apple Macintosh, Microsoft Windows, Linux). Universitätsstudium der Pädagogik, mehrere Jahre Tätigkeit im Ausland. Seminar- und Kursleiter, Referent und Fachbuchautor. Weiterhin ist er Herausgeber von dem Online-Fachportal «InformatikPraxis» bei der WEKA Business Media AG.

MaLiWi IT

 zum Portrait

Zu diesem Artikel wurden noch keine Kommentare geschrieben. Wir freuen uns, wenn Sie den ersten Kommentar zu diesem Artikel verfassen.
 
Kommentar schreiben

Bitte Wert angeben!

Bitte Wert angeben!

Bitte Wert angeben! Bitte geben Sie eine gültige E-Mail-Adresse ein!

Bitte Wert angeben!

Bitte Wert angeben!

Bitte Wert angeben!

Bitte alle fett beschrifteten Pflichtfelder ausfüllen.
Zurücksetzen
 
MOSH

Worum geht es?

Verbindungen zu einem Server per SSH sind heutzutage für die meisten Admins Alltag geworden – auch für viele Administratoren, die sich überwiegend in Windows-Umgebungen bewegen. Der eine oder andere Web- oder Mailserver, Firewalls, VMWare- und XenServer-Virtualisierungen, NAS-Systeme – all diese haben einen Linux-Unterbau, und den kann man nun einmal am besten per SSH verwalten. SSH ist allerdings leider ein ziemliches Sensibelchen, was die Qualität der Verbindung zwischen Server und Client angeht. In der erwähnten Ferienwohnung am Meer war das Internet zwar im Prinzip ausreichend schnell, aber es kam immer wieder zu kleineren Time-Outs. Kein Problem für Surfen im Netz und den Mailabruf – aber die offenen Terminalfenster mit den SSH-Verbindungen froren regelmässig ein. MOSH hilft diese Einschränkung zu umgehen – und das auf mitunter sehr beeindruckende Weise. Es legt sich einfach um eine neu aufgebaute SSH-Verbindung und transportiert die Bits und Bytes zwischen Client und Server dann aber nicht, wie SSH, über das auf andauernde zweiseitige Kommunikation angewiesene TCP, sondern über das etwas schweigsamere UDP – einem echten Männerprotokoll also. Was im Beziehungsalltag oftmals für Probleme sorgt, ist bei Serveradministration über wacklige Internetverbindungen hinweg sehr gewünscht: jeder kommuniziert fleissig drauflos, ohne sich gross um die Reaktionen des anderen zu kümmern.

Selbstverständlich läuft auch bei MOSH die Kommunikation nicht so einseitig, wie es hier etwas übertrieben dargestellt ist - aber eben erheblich fehlertoleranter. Abbrüche im WLAN, Wechsel des VPN, sogar ein Wechsel der externen (öffentlichen) IP-Adresse - all das verschmerzt MOSH, solange es immer eine Verbindung von einem Partner mit identischem Public Key ist. Aus MOSHs Selbstbeschreibung:

«Remote terminal application that allows roaming, supports intermittent connectivity, and provides intelligent local echo and line editing of user keystrokes.»

Installation auf Server und Clients

MOSH muss auf Server und Client vorhanden sein. MOSH wird auf einem beliebigen Linux-Server, der auch über SSH erreichbar ist, installiert. Anschliessend wartet MOSH auf Verbindungen von Clients zu dem lokalen SSH. MOSH ist „natürlich“ ein Kind der Open-Source- und Linux/Unix-Welt. Nichtsdestotrotz könnte sich MOSH zukünftig aber auch für Windows-Server nutzen lassen – Microsoft arbeitet ja bereits gemeinsam mit OpenSSH an einem nativen SSH-Client für die Powershell sowie einem SSH-Server für Windows. Werfen Sie bis dahin doch einmal einen Blick auf Bitvise, den SSH-Server (und –Client) für Windows-Systeme: www.bitvise.com

Auf Clientseite muss MOSH ebenfalls installiert werden. Unter Linux ist dies noch am einfachsten, bei Debian etwa als integriertes Paket:

aptitude - install - mosh

Ebenso unter CentOS und Fedora:

yum - install - mosh

Unter allen Distributionen lässt sich MOSH natürlich auch aus den Paketen von MOSH selber installieren, relativ elegant beispielsweise per RPM.

Windows

Unter Windows lässt sich, wie gesagt, MOSH weder als Client noch als Server nativ betreiben, aber per Umweg über Cygwin können Sie schon jetzt den MOSH-Client nutzen. Wer den Aufwand einer Cygwin-Installation scheut - die weitaus weniger elegant und unspektakulär ist wie das weiter unten erwähnte Homebrew für Mac OS -, kann auf MobaXterm zurückgreifen. Diese Terminal-Emulation lässt sich sogar von einem USB-Stick aus betreiben.

Mac

Unter Mac gibt es MOSH leider (noch) nicht als App, hier können wir es per homebrew (http://brew.sh) installieren. Was macht Homebrew? Mit Homebrew lassen sich Programme installieren, die Apple selber nicht im Portfolio hat. Um Homebrew selbst zu installieren, öffnen wir ein Terminal des Mac und geben dort ein:

lars$ ruby -e "$(curl -fsSL raw.githubusercontent.com/Homebrew/install/master/install)"

Anschliessend

brew - install - mosh

Nun lässt sich mosh auch auf dem Mac aufrufen.

MOSH nutzen

Auf Seiten des Servers, den man per SSH / MOSH verwalten will, muss nichts gestartet werden, weil MOSH sich als ein Wrapper um das eigentliche SSH herum legt. Auf Seiten des Clients – also Ihrem PC, Mac oder Android-Gerät - geschieht die "Konfiguration" mittels Übergabe verschiedener Parameter beim ersten Aufruf der Verbindung. Bitte beachten Sie, dass ja nach wie vor eine SSH-Verbindung hergestellt wird! Haben Sie also beispielsweise den SSH-Port von 22 (Standard) geändert, muss dies MOSH auch beim Aufruf mitgeteilt werden. Der einfachste Fall ist, wenn Sie eine Verbindung mit einem Server über den Standardport 22 und als gleichnamiger Benutzer (lokal wie remote) herstellen:

mosh <server>

Wenn der lokale und der entfernte Benutzername nicht identisch sind, lautet die Syntax:

mosh <benutzer><server><benutzer>@<server></server></benutzer>

Also beispielsweise:

mosh willi@1.2.3.4

Auf dem Server 1.2.3.4 startet nun der MOSH-Wrapper seinen Dienst, "greift" sich die angefangene SSH-Sitzung und baut eine Server-Client-Verbindung mit einem Port zwischen UDP 60000 und 61000 auf. Per lsof lässt sich dies auf dem Server einfach erkennen:

root@unser-server:/# lsof -i :60000 COMMAND     PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME mosh-serv 12843 lars    3u  IPv4 38142422      0t0  UDP www.unser-server.de:60000

Aufmerksame Leser werden einwenden, dass es schwierig werden könnte, das über Firewalls hindurch zu transportieren - gut aufgepasst! Wir können auf jeden Fall schon einmal den UDP-Port festlegen - beginnend bei 60000, hinauf bis 61000:

<port><server> mosh -p<port> <server></server></port>

mosh -p 60000 1.2.3.4

Nun ist aber unser Zielserver gar nicht per SSH-Port 22 erreichbar, sondern lauscht nur auf Port 2222. Dann lautet die Syntax:

mosh -p 60000 --ssh="ssh -p 2222" 1.2.3.4

Achtung: eine weitere Verbindung über denselben Port lässt sich natürlich nicht mehr starten! Während man bei SSH einfach mehrere parallel laufende Verbindung über ssh -p <port><server><port> <server> aufrufen kann, weil für jede Verbindung ein Socket gebildet wird, muss bei MOSH jeder Port  einzeln bestimmt - oder die Vergabe der Ports MOSH selbst überlassen werden. Mit mosh 1.2.3.4 handeln MOSH-Client und -Server die Portvergabe zwar selber aus - aber dann haben wir wiederum keine richtige Kontrolle darüber. Starten wir aber eine zweite Verbindung über  mosh -p 60000 1.2.3.4 wird diese auf Clientseite mit einer Fehlermeldung wie dieser abbrechen: </server></port>

Failed binding to 192.168.0.1:60000

Error binding to IP 192.168.0.1: bind: Die Adresse wird bereits verwendet

Failed binding to 0.0.0.0:60000

Error binding to any interface: bind: Die Adresse wird bereits verwendet

Network exception: bind: Die Adresse wird bereits verwendet

Connection to 1.2.3.4 closed.

Blockformat entfernen

Absatz

Adresse

Artikel

/usr/local/bin/mosh: Did not find mosh server startup message.

Also müssen wir bei mehreren Verbindungen die Portnummern jeweils ändern und – um den Überblick zu behalten - mitschreiben:

mosh -p 60001 1.2.3.4

mosh -p 60002 1.2.3.4

mosh -p 60003 1.2.3.4

Und so weiter. Da wiederum muss aber unsere Firewall mitspielen, womit wir beim nächsten Thema wären. Wie bekommt man eine Verbindung mit einem Server über MOSH hin, wenn dieser hinter einer Firewall steht - was eher der Regelfall als die Ausnahme sein dürfte.

Man in the Middle

Das Thema Firewalls, NAT und Portweiterleitung darf im professionellen Umfeld natürlich nicht übersehen werden. Auf jeden Fall muss eine zwischen Client und Server geschaltete Firewall den UDP-Portbereich von 60000 bis 61000 an den Server weiterreichen - oder nur einen einzelnen Port wie beispielsweise 60001, aber dann muss vom Client aus dieser auch definiert werden. Eine typische iptables-Regel auf einer Firewall mit der IP 1.2.3.4 etwa wäre, wenn der MOSH-Server unter der IP 192.168.0.1 lauscht:

$iptables -t nat -A PREROUTING -i $ext -p udp -d 1.2.3.4 --dport 60000 -j DNAT --to-destination 192.168.0.1:60000

Der Verbindungsaufbau lässt sich dann per tcpdump im Terminal mitloggen:

# tcpdump -i eth0 port 60000

listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes 08:41:27.357520 IP 85.202.67.194.64952 > 192.168.0.1.60000: UDP, length 69 08:41:27.373369 IP 192.168.0.1.60000 > 85.202.67.194.64952: UDP, length 341 08:41:27.513562 IP 85.202.67.194.64952 > 192.168.0.1.60000: UDP, length 76 08:41:27.515134 IP 192.168.0.1.60000 > 85.202.67.194.64952: UDP, length 102 (...)

Denksportaufgabe: Was ist eigentlich mit MOSH, SSH und Man-in-the-Middle-Attacken?

Fazit

SSH ist ein äusserst wichtiges Tool zur Verwaltung von Servern – und es wird durch die Verbindung von PowerShell und OpenSSH zukünftig sicher eher noch an Bedeutung gewinnen. Gleichzeitig steigt der Trend zum mobilen Arbeiten - MOSH verbindet beide Welten auf beeindruckende Weise. Vergessen Sie aber vor lauter Begeisterung über die stabilen SSH-Verbindungen, die MOSH ermöglicht, das Urlaub machen nicht!

MaLiWi IT

Produkt-Empfehlungen

  • InformatikPraxis

    InformatikPraxis

    DIE ultimative Praxislösung für IT-Entscheider!

    ab CHF 168.00

  • IT-Sicherheit

    IT-Sicherheit

    Schützen Sie Ihr Unternehmen konsequent vor Systemstörungen und Risiken.

    Mehr Infos

  • Die wichtigsten IT-Vertragsvorlagen

    Die wichtigsten IT-Vertragsvorlagen

    Über 100 IT-Vertragsvorlagen, Checklisten und Arbeitshilfen auf praktischem USB-Stick.

    Mehr Infos

Seminar-Empfehlungen

  • Praxis-Seminar, 1 Tag, ZWB, Zürich

    IT-Verträge entwerfen und verhandeln

    Rechtssicherheit bei IT-Projekten, Outsourcing und Cloud Computing

    Nächster Termin: 19. Juni 2018

    mehr Infos

  • Praxis-Seminar, 1 Tag, ZWB, Zürich

    Datenschutz am Arbeitsplatz

    Rechte und Pflichten im Umgang mit Mitarbeiter- und Bewerberdaten

    Nächster Termin: 05. Juni 2018

    mehr Infos