beheer en terminals
Hoewel voor de gemiddelde gebruiker een terminal-sessie met een server of bulletin-board toch echt iets uit het verleden is, is dit voor een ieder die iets met beheer doet nog steeds de standaardprocedure voor veel beheerwerk. Er zijn echter weinig specifieke programma’s beschikbaar voor dit nobele beheerwerk. Waarschijnlijk komt dit doordat het in toenemende mate een niche-markt is geworden EN omdat goede connectiviteit steeds meer een gegeven is. Want zolang je maar via een stabiele high-speed/low-latency verbinding toegang tot de host-systemen kan verkrijgen voldoen de standaard programma’s als ssh goed.
Ik heb echter aan den lijve ondervonden dat zodra je de wereld van satelliet-internet binnenstapt ssh daar niet zo geschikt voor is. Elke toetsaanslag wordt eerst met een latency van zo’n 800 msec naar de host gezonden die daarna met een zelfde vertraging de scherm-update terug stuurt. Het effect hiervan in de praktijk is dat het best even duurt voor je een ingetypt karakter ook daadwerkelijk op je scherm ziet wat nogal vervelend werkt. De kern van het probleem is dat in de klassieke terminal oplossing de client wel heel erg dom is, waardoor voor alle acties de host de hoofdrol speelt. Dit geeft in een high-latency omgeving een vrijwel onwerkbare situatie die een andere aanpak noodzakelijk maakt.
Mijn eerste oplossingsrichting behelsde het gebruik van telnet3270, een terminal-protocol waarbij een behoorlijk deel van de verwerking op de client gebeurt waardoor de invloed van latency minder wordt. Ik heb namelijk begin jaren negentig een lezing bijgewoond die over problemen met terminals over satellietverbindingen door de US-army in Desert-Storm ging, die dit toen met telnet3270 opgelost had. Een oplosssing uit de oude doos dus. Helaas bleek dat telnet3270-programmatuur voor zowel hedendaagse mac’s als linux-varianten niet beschikbaar is en verder kleven er aan telnet en z’n varianten nogal wat security problemen. Exit telnet3270 dus!
mosh, geen stream maar state machine
Een post op de blog van Jan-Piet Mens attendeerde me op het bestaan van mosh, een nieuwe aanpak voor terminal-verbindingen met remote systemen. Na een korte test bleek deze aanpak een uitstekende oplossing voor mijn uitdaging. En inderdaad, ik ben Jan-Piet Mens een glas bier schuldig :-).
De kern van mosh is dat het in tegenstelling tot traditionele systemen (die feitelijk niet meer doen dan op basis van streams toetsaanslagen van de client heen- en schermupdates van de server terugsturen) een layer-4 state-machine is. De client en de server kennen beiden de eigen status en de veranderingen daarin die ze in continuïteit met elkaar synchroniseren. Ergo, als je bij mosh een toets indrukt zie je het resultaat lokaal direct op het scherm terwijl de client op de achtergrond de status op de host update. Mosh “voorspelt” dus eigenlijk de veranderingen op de host. Netto resultaat: geen optische latency meer bij het typen. Bijkomend voordeel is dat wanneer de verbinding even wegvalt, bijvoorbeeld bij gebruik van Wifi- of 3G-verbindingen, bij herstel ervan de sessie nog steeds bestaat en je weer verder kunt waar je gebleven was. Dit geldt ook als je in de tussentijd een ander ip-adres toegewezen hebt gekregen, iets waar bijvoorbeeld ssh en telnet niet tegen kunnen. Kortom, het werkt ook bij roaming en flaky internet verbindingen.
Voor de initiële connectie wordt een ssh-sessie gestart die de remote-server (in user-space, geen root acces nodig dus) start en vervolgens zichzelf termineert. De client-sessie wisselt vanaf dat moment status-updates uit met de remote-server.
En ja, mosh is secure, het gebruikt AES-128 encryptie en authenticatie (in OCB mode). Om dit alles mogelijk te maken gebruikt mosh geen TCP maar is UDP gebaseerd dus UDP verkeer tussen client en host moet mogelijk zijn.
conclusie
Mosh is onderdeel van mijn dagelijkse routine geworden. Met dit programma kan ik over high-latency vebindingen toch goed met remote hosts werken. Mosh heeft daarom in mijn huidige setup ssh vervangen omdat het voor mij – zover het om pure terminal emulatie gaat – een superieur alternatief is.
verdere wetenswaardigheden
Mosh is geschreven door Keith Winston, het is Open Source en isuitgebracht onder een GNU GPL 3 licentie. Mosh werkt overigens (nog) niet met IPv6 en dus ook niet met IPv4/IPv6 roaming. Verder mist er ook een iPad (en Android) client voor mosh. Het eerste valt voorlopig goed mee te leven maar een iPad client zou me wel blij maken
externe links
- mosh home
- research paper over Mosh, USENIX ATC 2012
- post ‘standalone-sysadmin’ over mosh
- post Jan-Piet Mens over mosh
© Hans Pronk / 2012