Mosh

Q: Kdo napsal Mosh?

Mosh napsal Keith Winstein spolu s Andersem Kaseorgem, Quentinem Smithem, Richardem Tibbettsem, Keeganem McAllisterem a Johnem Hoodem.

Otázka: Proč další protokol pro vzdálené terminály?

Praktická latence na internetu roste s nárůstem bufferbloatu a sofistikovaných bezdrátových spojů, které optimalizují propustnost na úkor zpoždění. A roaming je nyní, kdy notebooky a kapesní zařízení z velké části vytlačily stolní počítače, běžnější než kdy dříve. SSH je skvělé, ale jeho používání je frustrující, když chcete změnit IP adresu nebo máte linku s velkým zpožděním či pochybné připojení.

TELNET měl navíc několik dobrých vlastností – režim lokálního echa a dobře definovaný síťový virtuální terminál. SSH ani dnes pořádně nepodporuje UTF-8 end-to-end na systému POSIX.

Otázka: Jsou principy mosh relevantní i pro jiné síťové aplikace?

Myslíme si, že ano. Principy návrhu, které Mosh zastává, jsou konzervativní: varování uživatele, pokud je zobrazovaný stav zastaralý, serializace a kontrolní body všech transakcí, takže pokud se neobjeví žádné varování, uživatel ví, že každá předchozí transakce proběhla úspěšně, a elegantní zpracování očekávaných událostí (jako je roaming z jedné sítě WiFi do druhé).

To nevypadá příliš kontroverzně, ale efektní aplikace jako Gmail-in-Chromium nebo na Androidu se stále chovají příšerně na pochybných připojeních nebo po změně IP adresy. (Už se vám někdy stalo, že Gmail nechal e-mailovou zprávu deset hodin ve stavu „Odeslání…“, zatímco vesele načítal novou poštu a neindikoval žádnou chybu? My také.) Domníváme se, že použití těchto hodnot může v mnoha síťových uživatelských rozhraních přinést značné zlepšení.

Otázka: Zobrazuje se mi hlášení „mosh requires a UTF-8 locale“. Jak to mohu opravit?

Pro diagnostiku problému spusťte na místním terminálu příkaz locale a ssh remotehost locale. Chcete-li používat Mosh, musí obě strany spojení zobrazovat lokální jazyk UTF-8, například LC_CTYPE="en_US.UTF-8".

V mnoha systémech SSH přenese proměnné prostředí související s lokálním jazykem, které pak zdědí mosh-server. Pokud tento mechanismus selže, Mosh (od verze 1.2) předá proměnné sám. Pokud ani jeden z těchto mechanismů není úspěšný, můžete provést něco jako

mosh remotehost --server="LANG=en_US.UTF-8 mosh-server"

Pokud en_US.UTF-8 na vzdáleném serveru neexistuje, můžete jej nahradit lokálem UTF-8, který existuje. Možná budete muset také nastavit LANG lokálně, abyste využili mosh-client. Je možné, že místní a vzdálený počítač budou potřebovat různé názvy locale. Viz také tento ticket GitHub.

Otázka: Co znamená zpráva „Nothing received from the server on UDP port 60003“?

To znamená, že mosh se podařilo úspěšně spustit mosh-server na vzdáleném počítači, ale klient není schopen komunikovat se serverem. Obecně to znamená, že nějaký typ firewallu blokuje pakety UDP mezi klientem a serverem. Pokud jste museli přesměrovat port TCP 22 v síti NAT pro SSH, pak budete muset přesměrovat i porty UDP. Mosh použije první dostupný port UDP, který začíná na 60001 a končí na 60999. Pokud budete mít na serveru pouze několik souběžných relací, můžete předat menší rozsah portů (např. 60000 až 60010).

Nástroje jako netstat, netcat, socat a tcpdump mohou být užitečné pro ladění problémů se sítí a bránou firewall.

Tento problém může být také důsledkem chyby v glibc 2.22, která postihuje programy linkované pomocí protobuf a utempter a používající agresivní příznaky zpevnění kompilátoru. (Záznam v bugtrackeru glibc, stejně jako záznam v bugtrackeru Mosh.) Problém způsobuje, že mosh-server při spuštění okamžitě segfaultuje. Věříme, že jsme tento problém v Mosh 1.2.6 vyřešili, ale pokud zjistíte opak, nahlaste prosím chybu.

Otázka: Proč všude trváte na UTF-8?

Opravdu nejsme fanatičtí zastánci UTF-8. Ale je mnohem jednodušší správně implementovat jeden emulátor terminálu než se snažit udělat správnou věc v různých obtížných okrajových případech. (O to se snaží GNU screen a podle našich zkušeností to vede k některým velmi obtížně laditelným situacím.) Takže mosh se prostě nespustí, dokud uživatel nenakonfiguruje vše pro čistou cestu UTF-8. Může to být otravné, ale pravděpodobně to také snižuje frustraci na cestě. (Bohužel 8bitový vt220 a UTF-8 vt220 jsou různé a nekompatibilní typy terminálů; UTF-8 jde pod stavový stroj vt220.)

Otázka: Jak mohu použít jiný port SSH (ne 22)?

Od verze Mosh 1.2 můžete předávat argumenty do ssh takto:

mosh remotehost --ssh="ssh -p 2222"

Nebo nakonfigurujte alias hostitele v ~/.ssh/config pomocí direktivy Port. Mosh to bude také respektovat.

Otázka: Dostávám ‚mosh-server not found‘.

Ujistěte se, že je mosh nainstalován na klientovi a mosh (nebo alespoň mosh-server) je nainstalován na serveru, ke kterému se snažíte připojit. Také se očekává, že server bude dostupný pod výchozím přihlašovacím jménem serveru PATH, což na serverech OS X a BSD obvykle neplatí, nebo pokud nainstalujete mosh-server do svého domovského adresáře. V těchto případech se podívejte na pokyny „Binární soubor serveru mimo cestu“ v části Použití výše.

Otázka: SSH se ověřuje pomocí tiketů Kerberos, ale Mosh po mně chce heslo.

V některých konfiguracích SSH kanonizuje název hostitele před jeho předáním zásuvnému modulu Kerberos GSSAPI. To je pro Mosh nefunkční, protože počáteční dopředné vyhledávání DNS provádí obalový skript Mosh. Chcete-li to obejít, zavolejte Mosh jako

mosh remotehost --ssh="ssh -o GSSAPITrustDns=no"

Tento postup často selže při kruhovém nastavení DNS. V takovém případě je pravděpodobně nejlepší vybrat konkrétního hostitele z fondu round-robin.

Otázka: Proč je vyrovnávací paměť zpětného procházení mého terminálu neúplná?

Mosh synchronizuje pouze viditelný stav terminálu. Tento problém sledujeme; viz tento problém a další, které jsou z něj propojeny. Prozatím je řešením použití screen nebo tmux na vzdálené straně.

Otázka: Jak získám 256 barev?

Ujistěte se, že spouštíte mosh v terminálu, který se inzeruje jako podporující 256 barev. (To obvykle znamená, že TERM bude xterm-256color nebo screen-256color-bce.)

Otázka: Jak napíšu C-^, výchozí znak escape v programu Mosh?

Na klávesnicích s rozložením pro Spojené státy lze tento znak napsat jako Ctrl-Shift-6 nebo často jako Ctrl-6 (to závisí na operačním systému a emulátoru terminálu). Na klávesnicích mimo USA je často obtížné najít správnou klávesu a někdy není k dispozici vůbec. Pokud je na vaší klávesnici mrtvá klávesa s diakritikou-obloučkem, pravděpodobně to nebude ta správná klávesa. Někdy však funguje klávesa Ctrl-6. Pokud tento znak nemůžete napsat, musíte nastavit proměnnou MOSH_ESCAPE_KEY; podrobnosti najdete na manuálové stránce Mosh.

Otázka: Jak mohu zařídit, aby server automaticky vyčistil neaktivní relace?

Podívejte se na záznamy pro MOSH_SERVER_NETWORK_TMOUT a MOSH_SERVER_SIGNAL_TMOUT v manuálové stránce mosh-server(1).

Otázka: Jaké jsou dosavadní výsledky zabezpečení Mosh?

Mosh 1.0 byl vydán v březnu 2012. Od vydání verze Mosh 1.3.2 v červenci 2017, pokud je vývojářům známo:

  • Za poslední čtyři roky nebyly v systému Mosh zaznamenány žádné bezpečnostní chyby jakéhokoli druhu (větší ani menší).
  • V systému Mosh nebyly nikdy hlášeny žádné závažné bezpečnostní chyby. Významné bezpečnostní chyby definujeme jako zvýšení oprávnění, vzdálené spuštění kódu, odepření služby třetí stranou atd.
  • Dva problémy s odepřením služby byly objeveny a opraveny vevydáních v roce 2012. Jeden problém umožňoval serveru mosh způsobit, že klient mosh spotřebovával nadbytečné množství procesoru (CVE-2012-2385, opraveno ve verzi Mosh1.2.1, vydané v květnu 2012). Další problém umožňoval hostitelskému serveru způsobit, že klient mosh odesílal datagramy UDP na nesprávnou adresu, což zmařilo jeho pokus o připojení (opraveno ve verzi Mosh 1.2.3, vydané v říjnu 2012).

Otázka: Jak je Mosh zabezpečen ve srovnání s SSH?

Myslíme si, že konzervativní návrh systému Mosh znamená, že jeho plocha pro útoky je příznivá ve srovnání se složitějšími systémy, jako jsou OpenSSL a OpenSSH. Dosavadní výsledky systému Mosh to potvrzují. Nakonec však jen čas ukáže, kdy bude v Moshi objevena první vážná bezpečnostní chyba – buď proto, že tam byla od začátku, nebo proto, že byla neúmyslně přidána během vývoje. Protokoly OpenSSH a OpenSSL mají více zranitelností, ale jsou také vydávány déle a jsou rozšířenější.

V jednom konkrétním ohledu je protokol Mosh bezpečnější než protokol SSH: SSH se spoléhá na neověřený protokol TCP, který přenáší obsah zabezpečeného proudu. To znamená, že útočník může spojení SSH ukončit jediným falešným segmentem „RST“. Naproti tomu Mosh používá zabezpečení na jiné vrstvě (ověřuje každý datagram), takže útočník nemůže ukončit relaci Mosh, pokud nedokáže průběžně bránit paketům, aby se dostaly na druhou stranu. Přechodný útočník může způsobit pouze přechodný výpadek viditelný uživatelem; jakmile útočník odejde, Mosh relaci obnoví.

V typickém použití však Mosh spoléhá na SSH při výměně klíčů na začátku relace, takže Mosh zdědí slabiny SSH – alespoň pokud ovlivňují krátkou relaci SSH, která se používá k nastavení dlouhodobé relace Mosh.

Otázka: Je Mosh ovlivněn útoky proti šifrovacímu režimu OCB2 z roku 2018?

Pokud víme, tak ne – Mosh používá OCB3. Autoři článku píší, že útok není použitelný pro OCB3.

Otázka: Proč Mosh používá pro klíč relace AES-128, a ne AES-192 nebo AES-256?

  • AES-128 je více než dostatečná délka klíče pro klíč relace.
  • Časté dotazy k OCB doporučují AES-128.
  • AES-128 je o něco příjemnější a nepodléhá útokům na příbuzné klíče, které postihují AES-192 a AES-256.
  • AES-128 je o něco příjemnější a nepodléhá útokům na příbuzné klíče. (Schneier: „klíčový plán pro 256bitovou verzi je dost mizerný – na což jsme upozorňovali v našem článku z roku 2000 – ale nevztahuje se na AES se 128bitovým klíčem“. Viz tento příspěvek na blogu.)

Otázka: Funguje mosh s Amazon EC2?

Ano, funguje skvěle, ale nezapomeňte na firewallu EC2 otevřít porty UDP 60000-61000.

Otázka: Jak zjistím, zda mosh funguje správně?

Po spuštění mosh user@server budete v případě úspěchu vhozeni do přihlašovacího shellu na vzdáleném počítači. Pokud chcete zkontrolovat, zda se místo ssh používá mosh, zkuste zadáním Ctrl-^ Ctrl-Z pozastavit relaci (s mosh 1.2.4 nebo novějším na klientovi). Spuštěním příkazu fg se pak vrátíte zpět.

Otázka: Jaký je rozdíl mezi programy mosh, mosh-client a mosh-server? Který z nich mám použít?

Příkaz mosh je obalový skript, který je navržen tak, aby byl hlavním způsobem, jak používat mosh. Ve většině případů stačí v příkazovém řádku nahradit příkaz „ssh“ příkazem „mosh“. V zákulisí obalový skript mosh provede SSH připojení k serveru, spustí mosh-server a poté spojení SSH uzavře. Poté spustí spustitelný soubor mosh-client na klientovi a předá mu potřebné informace, aby se mohl připojit k nově vytvořené instanci mosh-server.

Při běžném používání není nutné spouštět mosh-client a mosh-server přímo.

Otázka: Jak spustím klienta mosh a server zvlášť?

Pokud vám nefunguje obalový skript mosh, můžete zkusit spustit programy mosh-client a mosh-server samostatně a vytvořit spojení. To může být užitečná technika ladění.

1. Přihlaste se ke vzdálenému hostiteli a spusťte mosh-server.

Výstup bude vypadat takto:

$ mosh-server MOSH CONNECT 60004 4NeCCgvZFe2RnPgrcU1PQwmosh-server (mosh 1.1.3)Copyright 2012 Keith Winstein <[email protected]>License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.This is free software: you are free to change and redistribute it.There is NO WARRANTY, to the extent permitted by law.

2. Na místním hostiteli spusťte:

$ MOSH_KEY=key mosh-client remote-IP remote-PORT

kde „key“ je 22bajtový řetězec vypsaný mosh-serverem (v tomtopříkladu „4NeCCgvZFe2RnPgrcU1PQw“), „remote-PORT“ je číslo portuudělené serverem (v tomto případě 60004) a „remote-IP“ je IP adresa serveru. IP adresu serveru můžete vyhledat pomocí příkazu „host remotehost“.

3. Pokud vše proběhne v pořádku, měli byste mít funkční připojení k systému Mosh. Informace o tom, kde proces selhává, nám mohou pomoci vyladit, proč vám Mosh nefunguje.

Otázka: S mosh-serverem na FreeBSD nebo OS X mám někdy podivné problémy s barvami. Co je špatně?

Tato chyba je v Mosh 1.2 opravena. Děkuji Edovi Schoutenovi a Peterovi Jeremymu za její vypátrání.

Otázka: Jak mohu přispívat do programu mosh?

Vaše příspěvky vítáme! Připojte se k nám v kanálu #mosh na Freenode IRC, navštivte nás na GitHubu nebo nám napište [email protected]. Chcete-li přispět do naší kódové základny, forkněte prosím repozitář na GitHubu a otevřete tam požadavek na stažení.

Otázka: Kdo pomáhal s mosh?

Jsme velmi vděční za pomoc a podporu od:

  • Hariho Balakrishnana, který poradil s touto prací a vymyslel název.
  • Paula Williamse, jehož reverzní stavový diagram vt500 je základem pro parser Mosh.
  • Anonymním uživatelům, kteří přispěli záznamy relací pro ladění a měření prediktivního echa Mosh.
  • Nicolaji Zeldovičovi za užitečné připomínky k výzkumné práci Mosh.
  • Richardu Stallmanovi za užitečnou diskusi o možnostech lokálního editačního protokolu SUPDUP.
  • Nelson Elhage
  • Christine Spang
  • Stefie Tellex
  • Joseph Sokol-.Margolis
  • Waseem Daher
  • Bill McCloskey
  • Austin Roach
  • Greg Hudson
  • Karl Ramm
  • Alexander Chernyakhovsky
  • Peter Iannucci
  • Evan Broder
  • Neha Narula
  • Katrina LaCurts
  • Ramesh Chandra
  • Peter Jeremy
  • Ed Schouten
  • Ryan Steinmetz
  • Jay Freeman
  • Dave Täht
  • Larry Doolittle
  • Daniel Drown
  • Timo Juhani Lindfors
  • Timo Sirainen
  • Ira Cooper
  • Felix Gröbert
  • Luke Mewburn
  • Anton Lundin
  • Philipp Haselwarter
  • Timo J. Rinne
  • Barosl Lee
  • Andrew Chin
  • Louis Kruger
  • Jérémie Courrèges.Anglas
  • Pasi Sjöholm
  • Richard Woodbury
  • Igor Bukanov
  • Geoffrey Thomas
  • Steve Dignam
  • HIGUCHI Yuta
  • Baruch Siach

Překlad: Miloš Šimáček

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.