Comparaison
| SSH | Mosh | |
|---|---|---|
| Transport | TCP, en général port 22 | SSH pour se connecter, puis UDP |
| Changement de réseau ou d'IP du client | La session se coupe | La session continue |
| Frappe sur une liaison lente | Attend le serveur | Affiche la frappe localement, tout en vérifiant avec le serveur |
| Prérequis sur le serveur | sshd | sshd et mosh-server. Root n'est pas nécessaire |
| Historique de défilement | Géré par votre terminal | Seul l'écran visible est synchronisé |
| Redirection de port, d'agent et X11 | Oui | Non |
| Copie de fichiers, scripts | scp, sftp, ssh host command | Pas fait pour cela. Il sert aux terminaux interactifs |
Ce qu'il fait en pratique
Nous avons ouvert une session Mosh, retiré le conteneur client de son réseau pendant 6 secondes, puis l'y avons remis. Mosh a affiché une barre en haut avec Last reply 10 seconds ago. [To quit: Ctrl-^ .]. Ensuite, la session a continué dans le même shell, et une commande tapée après s'est exécutée normalement.
Une session SSH ordinaire se termine dans ce genre de situation si le réseau reste absent assez longtemps, ou si votre adresse IP change. Voir Broken pipe et keepalive.
Installation
Mosh doit être installé à la fois sur votre machine et sur le serveur :
sudo apt-get install mosh # Debian, Ubuntu
brew install mosh # macOS with Homebrew
Ouvrir les ports UDP
mosh-server prend le premier port UDP libre à partir de 60001. Dans notre test, c'était 60001. Ouvrez la plage dans le pare-feu du serveur, par exemple avec ufw :
sudo ufw allow 60000:61000/udp
Si vous n'ouvrez que quelques sessions, une plage plus petite suffit. Si vous redirigez le TCP 22 sur un routeur pour atteindre le serveur, redirigez aussi ces ports UDP. Le site de Mosh cite un pare-feu qui bloque l'UDP comme cause quand rien n'est reçu du serveur.
Se connecter
mosh user@server
mosh --ssh="ssh -p 2222" user@server
mosh -p 60001 user@server
Utilisez --ssh pour un autre port SSH et -p pour choisir le port UDP. -p ne change pas le port SSH. Pour quitter une session qui ne répond plus, appuyez sur Ctrl+^ puis sur ..
Limites à prévoir
- Pas d'historique de défilement. Mosh ne synchronise que l'écran visible. Le conseil de Mosh lui-même est de lancer tmux ou screen sur le serveur pour l'historique. Voir l'aide-mémoire tmux. Pour retrouver le même shell après la fermeture du client, voir garder une session SSH active avec tmux.
- Pas de redirection. Si vous avez besoin d'un tunnel en même temps, ouvrez-le avec une commande
sshséparée. - UTF-8 uniquement. Avec une locale qui n'est pas UTF-8,
mosh-servers'arrête avecmosh-server needs a UTF-8 native locale to run.. Vérifiezlocaledes deux côtés. - L'UDP doit passer. Les réseaux qui n'autorisent que le TCP ne fonctionneront pas.
- Pas de protection contre un redémarrage.
mosh-serverest un processus ordinaire sur le serveur : un redémarrage le termine.
La sécurité de la session repose sur une clé que SSH échange au début, après quoi le trafic est chiffré et authentifié avec AES-128 en mode OCB3, d'après le site de Mosh.
Questions
Mosh est-il plus rapide que SSH ?
Pas en débit. Mosh paraît plus rapide sur les liaisons lentes parce qu'il affiche tout de suite ce que vous tapez. Pour copier des fichiers ou ouvrir des tunnels, c'est SSH qu'il faut.
Quels ports Mosh utilise-t-il ?
Il se connecte en SSH, en général sur le port TCP 22, puis utilise un port UDP entre 60000 et 61000 sur le serveur, à partir de 60001.
Mosh remplace-t-il SSH ?
Non. Mosh utilise SSH pour se connecter et lancer mosh-server. Gardez SSH pour copier des fichiers, rediriger des ports et lancer des scripts.
Que signifie mosh did not make a successful connection ?
L'UDP de votre machine n'atteint pas mosh-server. Le message complet se termine par Please verify that UDP port 60001 is not firewalled and can reach the server. Ouvrez 60000:61000/udp sur le serveur et dans le pare-feu de votre hébergeur, et vérifiez que votre réseau laisse passer l'UDP.