Mosh ou SSH : quelle différence ?

Mosh est un terminal pour les connexions instables. Il s'authentifie avec SSH puis passe en UDP : la session survit à la mise en veille, aux changements de réseau et aux coupures, et affiche votre frappe sans attendre le serveur. Il exige Mosh installé aux deux extrémités et les ports UDP 60000 à 61000 ouverts, et n'offre ni redirection de port ni historique de défilement. Pour les fichiers, les tunnels et les scripts, vous gardez SSH.

Mis à jour le . Mosh 1.4.0 entre deux conteneurs jetables Debian 13, y compris avec une coupure réseau de 6 secondes.

Comparaison

SSHMosh
TransportTCP, en général port 22SSH pour se connecter, puis UDP
Changement de réseau ou d'IP du clientLa session se coupeLa session continue
Frappe sur une liaison lenteAttend le serveurAffiche la frappe localement, tout en vérifiant avec le serveur
Prérequis sur le serveursshdsshd et mosh-server. Root n'est pas nécessaire
Historique de défilementGéré par votre terminalSeul l'écran visible est synchronisé
Redirection de port, d'agent et X11OuiNon
Copie de fichiers, scriptsscp, sftp, ssh host commandPas 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 ssh séparée.
  • UTF-8 uniquement. Avec une locale qui n'est pas UTF-8, mosh-server s'arrête avec mosh-server needs a UTF-8 native locale to run.. Vérifiez locale des 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-server est 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.

Sources

Autres guides : Sessions et tmux

Tous les guides