Un confronto diretto
| SSH | Mosh | |
|---|---|---|
| Trasporto | TCP, di solito porta 22 | SSH per il login, poi UDP |
| Cambio di rete o dell'IP del client | La sessione si interrompe | La sessione continua |
| Digitare su un collegamento lento | Aspetta il server | Mostra ciò che digiti in locale, verificando intanto con il server |
| Cosa serve sul server | sshd | sshd e mosh-server. Non servono i privilegi di root |
| Scrollback | Gestito dal tuo terminale | Solo lo schermo visibile viene tenuto sincronizzato |
| Inoltro di porta, agent e X11 | Sì | No |
| Copia di file, script | scp, sftp, ssh host command | Non è 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
sshseparato. - Solo UTF-8. Con una locale diversa da UTF-8,
mosh-serversi ferma conmosh-server needs a UTF-8 native locale to run.. Controllalocalesu 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.