Mosh

Q: Hvem har skrevet Mosh?

Mosh blev skrevet af Keith Winstein sammen med Anders Kaseorg, Quentin Smith, Richard Tibbetts, Keegan McAllister og John Hood.

Sp: Hvorfor endnu en fjernterminalprotokol?

Praktisk latenstid på internettet er stigende med fremkomsten af bufferbloat og sofistikerede trådløse forbindelser, der optimerer for gennemstrømning frem for forsinkelse. Og roaming er mere almindeligt end nogensinde før, nu hvor bærbare computere og håndholdte enheder i vid udstrækning har fortrængt de stationære computere. SSH er fantastisk, men frustrerende at bruge, når man ønsker at ændre IP-adresser eller har et link med lang forsinkelse eller en tvivlsom forbindelse.

Dertil kommer, at TELNET havde nogle gode ting – en lokal ekko-tilstand og en veldefineret virtuel netværksterminal. Selv i dag understøtter SSH ikke korrekt UTF-8 end-to-end på et POSIX-system.

Spørgsmål: Er mosh-principperne relevante for andre netværksapplikationer?

Vi mener det. De designprincipper, som Mosh står for, er konservative: advarsel til brugeren, hvis den tilstand, der vises, er forældet, serialisering og checkpointing af alle transaktioner, så brugeren ved, at hver tidligere transaktion er lykkedes, hvis der ikke er nogen advarsler, og håndtering af forventede hændelser (som roaming fra et WiFi-netværk til et andet) på en elegant måde.

Disse virker ikke alt for kontroversielle, men smarte apps som Gmail-in-Chromium eller på Android opfører sig stadig grusomt på tvivlsomme forbindelser eller efter at have skiftet IP-adresse. (Har du nogensinde oplevet, at Gmail har ladet en e-mail-besked stå i “Sending…” i ti timer, mens den lystigt hentede ny post uden at angive nogen form for fejl? Det har vi også.) Vi mener, at der kan være betydelig plads til forbedringer i mange netværksbrugergrænseflader ved at anvende disse værdier.

Q: Jeg får “mosh requires a UTF-8 locale.” Hvordan kan jeg rette dette?

For at diagnosticere problemet skal du køre locale på den lokale terminal, og ssh remotehost locale. For at bruge Mosh skal begge sider af forbindelsen vise et UTF-8-regnskab, som LC_CTYPE="en_US.UTF-8".

På mange systemer vil SSH overføre de lokalitetsrelaterede miljøvariabler, som derefter arves af mosh-server. Hvis denne mekanisme fejler, vil Mosh (fra og med version 1.2) selv overføre variablerne. Hvis ingen af mekanismerne lykkes, kan du gøre noget i stil med

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

Hvis en_US.UTF-8 ikke findes på fjernserveren, kan du erstatte dette med et UTF-8-lokale, der findes. Du skal muligvis også indstille LANG lokalt til fordel for mosh-client. Det er muligt, at den lokale maskine og fjernmaskinen har brug for forskellige lokalnavne. Se også denne GitHub-billet.

Spørgsmål: Hvad betyder meddelelsen “Intet modtaget fra serveren på UDP-port 60003”?

Det betyder, at mosh var i stand til at starte mosh-server med succes på fjernmaskinen, men klienten kan ikke kommunikere med serveren. Dette betyder generelt, at en eller anden form for firewall blokerer UDP-pakkerne mellem klienten og serveren. Hvis du var nødt til at videresende TCP-port 22 på en NAT til SSH, skal du også videresende UDP-porte. Mosh vil bruge den første tilgængelige UDP-port, der starter ved 60001 og slutter ved 60999. Hvis du kun skal have en lille håndfuld samtidige sessioner på en server, kan du videresende et mindre interval af porte (f.eks. 60000 til 60010).

Værktøjer som netstat, netcat, socat og tcpdump kan være nyttige til fejlfinding af netværks- og firewallproblemer.

Dette problem kan også skyldes en fejl i glibc 2.22, der påvirker programmer, der linker med protobuf og utempter og bruger aggressive compilerhærdningsflag. (glibc-bugtrackerpost, samt Mosh-bugtrackerpost.) Problemet får mosh-server til at segfare straks ved opstart. Vi mener at have løst problemet i Mosh 1.2.6, men rapporter venligst en fejl, hvis du finder noget andet.

Q: Hvorfor insisterer I på UTF-8 overalt?

Vi er virkelig ikke UTF-8 fanatikere. Men det er meget nemmere at implementere én terminalemulator korrekt end at forsøge at gøre det rigtige i en række vanskelige kanttilfælde. (Det er det, som GNU screen forsøger at gøre, og vores erfaring viser, at det fører til nogle meget vanskelige situationer, som er vanskelige at fejlfinde). Så mosh vil bare ikke starte op, før brugeren har konfigureret alt til en UTF-8-renset vej. Det kan være irriterende, men det mindsker sikkert også frustrationer hen ad vejen. (Desværre er en 8-bit vt220 og en UTF-8 vt220 forskellige og inkompatible terminaltyper; UTF-8 går ind under vt220-tilstandsmaskinen.)

Q: Hvordan bruger jeg en anden SSH-port (ikke 22)?

Som i Mosh 1.2 kan du sende argumenter til ssh på følgende måde:

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

Og konfigurere et værtsalias i ~/.ssh/config med et Port-direktiv. Mosh vil også respektere det.

Sp: Jeg får ‘mosh-server not found’.

Sørg for, at mosh er installeret på klienten, og at mosh (eller i det mindste mosh-server) er installeret på den server, du forsøger at oprette forbindelse til. Desuden forventes det, at serveren er tilgængelig på din servers standardlogin PATH, hvilket normalt ikke er tilfældet på OS X- og BSD-servere, eller hvis du installerer mosh-server i din hjemmemappe. I disse tilfælde skal du se vejledningen “Server binary outside path” i afsnittet Brug ovenfor.

Q: SSH autentificerer ved hjælp af Kerberos-billetter, men Mosh beder mig om en adgangskode.

I nogle konfigurationer kanoniserer SSH værtsnavnet, før det sendes til Kerberos GSSAPI-plugin’et. Dette går i stykker for Mosh, fordi det indledende fremadrettede DNS-søgning udføres af Mosh-wrapper-scriptet. Hvis du vil omgå dette, skal du påkalde Mosh as

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

Dette vil ofte mislykkes på en round-robin DNS-setup. I så fald er det nok bedst at vælge en bestemt vært fra round-robin-puljen.

Q: Hvorfor er min terminals scrollback-buffer ufuldstændig?

Mosh synkroniserer kun den synlige tilstand af terminalen. Vi følger dette problem; se dette problem og de andre, der er linket derfra. Indtil videre er løsningen at bruge screen eller tmux på fjernsiden.

Spørgsmål: Hvordan får jeg 256 farver?

Sørg for, at du kører mosh i en terminal, der annoncerer sig selv som værende 256-farvetegnet. (Dette betyder generelt, at TERM vil være xterm-256color eller screen-256color-bce.)

Spørgsmål: Hvordan skriver jeg C-^, Moshs standard escape-tegn?

På tastaturer med amerikansk layout kan dette skrives som Ctrl-Shift-6, eller ofte som Ctrl-6 (dette afhænger af dit operativsystem og din terminalemulator). På tastaturer, der ikke er amerikanske, er det ofte svært at finde den rigtige tast, og nogle gange er den slet ikke tilgængelig. Hvis dit tastatur har en død tast med en accent-circumflex, er det sandsynligvis ikke den rigtige tast. Ctrl-6 virker dog nogle gange. Hvis du ikke kan skrive dette tegn, skal du indstille variablen MOSH_ESCAPE_KEY; se Mosh man-siden for nærmere oplysninger.

Spørgsmål: Hvordan kan jeg få serveren til automatisk at rydde op i hvilende sessioner?

Se venligst posterne for MOSH_SERVER_NETWORK_TMOUT og MOSH_SERVER_SIGNAL_TMOUT i man-siden mosh-server(1).

Sp: Hvad er Moshs sikkerhedsresultater indtil videre?

Mosh 1.0 blev udgivet i marts 2012. Fra og med udgivelsen af Mosh 1.3.2 i juli 2017, så vidt udviklerne er klar over:

  • I de sidste fire år er der ikke blevet rapporteret om nogen form for sikkerhedshuller (større eller mindre) i Mosh.
  • Ingen større sikkerhedssårbarheder er nogensinde blevet rapporteret i Mosh. Vi definerer større sikkerhedssårbarheder som værende rettighedseskalering, fjernudførelse af kode, lammelse af tjenesten af en tredjepart osv.
  • To denial-of-service-problemer blev opdaget og rettet i udgaverne i 2012. Det ene problem gjorde det muligt for en mosh-server at få themosh-client til at bruge for meget CPU (CVE-2012-2385, rettet i Mosh1.2.1, udgivet i maj 2012). Et andet problem gjorde det muligt for serverværten at få mosh-klienten til at sende UDP-datagrammer til en ukorrekt adresse, hvilket forhindrede dens forsøg på at oprette forbindelse (rettet i Mosh 1.2.3, udgivet i oktober 2012).

Spørgsmål: Hvordan er Mosh’s sikkerhed sammenlignet med SSH’s?

Vi mener, at Moshs konservative design betyder, at dens angrebsoverflade kan sammenlignes positivt med mere komplicerede systemer som OpenSSL og OpenSSH. Mosh’s resultater har indtil videre bekræftet dette. I sidste ende vil det dog kun tiden vise, hvornår den første alvorlige sikkerhedsbrist bliver opdaget i Mosh – enten fordi den har været der hele tiden, eller fordi den blev tilføjet utilsigtet under udviklingen. OpenSSH og OpenSSL har haft flere sårbarheder, men de har også været udgivet i længere tid og er mere udbredte.

I én konkret henseende er Mosh-protokollen mere sikker end SSH’s: SSH er afhængig af uautentificeret TCP til at overføre indholdet af den sikre strøm. Det betyder, at en angriber kan afslutte en SSH-forbindelse med et enkelt falsk “RST”-segment. Mosh anvender derimod sin sikkerhed på et andet lag (autentificering af hvert datagram), så en angriber kan ikke afslutte en Mosh-session, medmindre angriberen løbende kan forhindre pakker i at nå frem til den anden side. En forbigående angriber kan kun forårsage en forbigående, brugersynlig afbrydelse; når angriberen forsvinder, vil Mosh genoptage sessionen.

I typisk brug er Mosh imidlertid afhængig af SSH til at udveksle nøgler i begyndelsen af en session, så Mosh vil arve SSH’s svagheder – i det mindste for så vidt som de påvirker den korte SSH-session, der bruges til at oprette en langvarig Mosh-session.

Spørgsmål: Er Mosh påvirket af 2018-angrebene mod OCB2-ciphermodes?

Ingen, som vi kender til – Mosh bruger OCB3. Forfatterne af papiret skriver, at angrebet ikke kan anvendes på OCB3.

Q: Hvorfor bruger mosh AES-128 til en sessionsnøgle og ikke AES-192 eller AES-256?

  • AES-128 er mere end en passende nøglelængde for en sessionsnøgle.
  • OCB FAQ anbefaler AES-128.
  • AES-128 er lidt pænere og er ikke udsat for de relaterede nøgleangreb, som AES-192 og AES-256 er udsat for. (Schneier: “nøgleplanen for 256-bit versionen er temmelig elendig — noget vi påpegede i vores artikel fra 2000 — men det gælder ikke for AES med en 128-bit nøgle.” Se dette blogindlæg.)

Q: Virker mosh med Amazon EC2?

Ja, det fungerer fint, men husk at åbne UDP-porte 60000-61000 på EC2-firewallen.

Spørgsmål: Hvordan kan jeg se, om mosh fungerer korrekt?

Når du kører mosh user@server, vil du, hvis det lykkes, blive smidt ind i din login-shell på fjernmaskinen. Hvis du vil kontrollere, at mosh bruges i stedet for ssh, kan du prøve at skrive Ctrl-^ Ctrl-Z for at afbryde sessionen (med mosh 1.2.4 eller nyere på klienten). Hvis du kører fg vil du derefter vende tilbage.

Spørgsmål: Hvad er forskellen mellem mosh, mosh-client og mosh-server? Hvilken af dem skal jeg bruge?

Kommandoen mosh er et wrapper-script, der er designet til at være den primære måde, hvorpå du bruger mosh. I de fleste tilfælde kan du blot erstatte “ssh” med “mosh” i din kommandolinje. Bag kulisserne vil mosh wrapper-scriptet SSH til serveren, starte mosh-server op og derefter lukke SSH-forbindelsen. Derefter vil det starte den eksekverbare mosh-client på klienten og give den de nødvendige oplysninger, så den kan oprette forbindelse til den nyoprettede mosh-server-instans.

I normal brug behøver mosh-client og mosh-server ikke at blive kørt direkte.

Spørgsmål: Hvordan kan jeg køre mosh-klienten og -serveren separat?

Hvis mosh wrapper-scriptet ikke fungerer for dig, kan du prøve at køre programmerne mosh-client og mosh-server separat for at oprette en forbindelse. Dette kan være en nyttig fejlfindingsteknik.

1. Log ind på fjernværten, og kør mosh-server.

Det vil give output som:

$ 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. På den lokale vært skal du køre:

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

hvor “key” er den 22-byte-streng, der udskrives af mosh-server (i dette eksempel “4NeCCgvZFe2RnPgrcU1PQw”), “remote-PORT” er det portnummer, der er angivet af serveren (60004 i dette tilfælde), og “remote-IP” er serverens IP-adresse. Du kan finde serverens IP-adresse med “host remotehost”.

3. Hvis alt går godt, skulle du have en fungerende Mosh-forbindelse. Oplysninger om, hvor processen fejler, kan hjælpe os med at finde ud af, hvorfor Mosh ikke virker for dig.

Q: Med mosh-serveren på FreeBSD eller OS X får jeg nogle gange underlige farveproblemer. Hvad er der galt?

Denne fejl er rettet i Mosh 1.2. Tak til Ed Schouten og Peter Jeremy for at opspore dette.

Sp: Hvordan bidrager jeg til mosh?

Vi glæder os over dit bidrag! Vær med i #mosh-kanalen på Freenode IRC, besøg os på GitHub, eller send en e-mail til [email protected]. Hvis du vil bidrage til vores kodebase, skal du gaffe repositoriet på GitHub og åbne en pull request der.

Spørgsmål: Hvem hjalp med mosh?

Vi er meget taknemmelige for hjælp og støtte fra:

  • Hari Balakrishnan, som rådgav dette arbejde og fandt på navnet.
  • Paul Williams, hvis reverse-engineered vt500-tilstandsdiagram er grundlaget for Mosh-parseren.
  • De anonyme brugere, der bidrog med sessionslogfiler til tuning og måling af Moshs prædiktive ekko.
  • Nickolai Zeldovich for nyttige kommentarer til Mosh-forskningsartiklen.
  • Richard Stallman for nyttige diskussioner om mulighederne i SUPDUP Local Editing Protocol.
  • 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

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.