Mosh o SSH: qual è la differenza

Mosh è un terminale per connessioni instabili. Fa il login con SSH, poi passa a UDP, così una sessione sopravvive a sospensione, cambi di rete e cadute, e mostra ciò che digiti senza aspettare il server. Richiede Mosh installato su entrambi i lati e le porte UDP da 60000 a 61000 aperte, e non ha inoltro di porta né scrollback. Per file, tunnel e script usi ancora SSH.

Aggiornata il . Mosh 1.4.0 tra due container Debian 13 usa e getta, compresa un'interruzione di rete di 6 secondi.

Un confronto diretto

SSHMosh
TrasportoTCP, di solito porta 22SSH per il login, poi UDP
Cambio di rete o dell'IP del clientLa sessione si interrompeLa sessione continua
Digitare su un collegamento lentoAspetta il serverMostra ciò che digiti in locale, verificando intanto con il server
Cosa serve sul serversshdsshd e mosh-server. Non servono i privilegi di root
ScrollbackGestito dal tuo terminaleSolo lo schermo visibile viene tenuto sincronizzato
Inoltro di porta, agent e X11SìNo
Copia di file, scriptscp, sftp, ssh host commandNon è fatto per questo. Serve per i terminali interattivi

Cosa fa in pratica

Abbiamo aperto una sessione Mosh, tolto il container client dalla sua rete per 6 secondi e rimesso. Mosh ha mostrato in alto una barra con Last reply 10 seconds ago. [To quit: Ctrl-^ .]. Poi la sessione è proseguita nella stessa shell, e un comando digitato dopo è stato eseguito normalmente.

Una normale sessione SSH in una situazione simile termina, se la rete resta assente abbastanza a lungo o se il tuo indirizzo IP cambia. Vedi Broken pipe e keepalive.

Installazione

Mosh va installato sia sul tuo computer sia sul server:

sudo apt-get install mosh   # Debian, Ubuntu
brew install mosh           # macOS with Homebrew

Aprire le porte UDP

mosh-server prende la prima porta UDP libera a partire da 60001. Nel nostro test era la 60001. Apri l'intervallo nel firewall del server, per esempio con ufw:

sudo ufw allow 60000:61000/udp

Se esegui solo poche sessioni, basta un intervallo più piccolo. Se inoltri la TCP 22 su un router per raggiungere il server, inoltra anche queste porte UDP. Il sito di Mosh indica come causa un firewall che blocca UDP quando dal server non arriva nulla.

Connessione

mosh user@server
mosh --ssh="ssh -p 2222" user@server
mosh -p 60001 user@server

Usa --ssh per una porta SSH diversa e -p per scegliere la porta UDP. -p non cambia la porta SSH. Per uscire da una sessione che non risponde più, premi Ctrl+^ e poi ..

Limiti da aspettarsi

  • Nessuno scrollback. Mosh sincronizza solo lo schermo visibile. Il consiglio di Mosh stesso è di usare tmux o screen sul server per la cronologia. Vedi la scheda riassuntiva di tmux. Per tornare alla stessa shell dopo la chiusura del client, vedi mantenere attiva una sessione SSH con tmux.
  • Nessun inoltro. Se ti serve un tunnel nello stesso momento, aprilo con un comando ssh separato.
  • Solo UTF-8. Con una locale diversa da UTF-8, mosh-server si ferma con mosh-server needs a UTF-8 native locale to run.. Controlla locale su entrambi i lati.
  • UDP deve passare. Le reti che consentono solo TCP non funzionano.
  • Non protegge da un riavvio. mosh-server è un normale processo sul server, quindi un riavvio lo termina.

La sicurezza della sessione deriva da una chiave che SSH scambia all'inizio, dopodiché il traffico è cifrato e autenticato con AES-128 in modalità OCB3, secondo il sito di Mosh.

Domande

Mosh è più veloce di SSH?

Non come velocità di trasferimento. Mosh sembra più veloce sulle connessioni lente perché mostra subito quello che scrivi. Per copiare file o aprire tunnel, lo strumento è SSH.

Quali porte usa Mosh?

Accede via SSH, di solito sulla porta TCP 22, poi usa una porta UDP tra 60000 e 61000 sul server, a partire da 60001.

Mosh sostituisce SSH?

No. Mosh usa SSH per accedere e avviare mosh-server. Tieni SSH per copiare file, port forwarding e script.

Cosa significa mosh did not make a successful connection?

L'UDP dal tuo computer non arriva a mosh-server. Il messaggio completo finisce con Please verify that UDP port 60001 is not firewalled and can reach the server. Apri 60000:61000/udp sul server e nel firewall del provider, e controlla che la rete in cui sei lasci passare l'UDP.

Fonti

Altro in Sessioni e tmux

Tutte le guide