Tutoriel Linux

Mosh sous Linux : garder le terminal utilisable sur une connexion instable

Débutant3 min de lecture

Une session SSH peut devenir inutilisable dès que le réseau change : Wi-Fi qui décroche, passage en 4G, sortie de veille ou tunnel VPN qui se reconstruit. Mosh garde une session de terminal ouverte malgré ces coupures courtes, à condition de préparer correctement le serveur et le pare-feu.

Ce n’est pas un remplacement complet de SSH. Mosh utilise SSH pour l’authentification, puis transporte le terminal en UDP. Vous conservez donc la sécurité de la connexion initiale, mais vous devez aussi autoriser le port UDP utilisé par Mosh.

Installer Mosh sur le client et le serveur

Installez le paquet sur votre poste local et sur la machine distante. Sur Debian ou Ubuntu :

sudo apt update
sudo apt install mosh

Sur Fedora :

sudo dnf install mosh

Sur Arch Linux :

sudo pacman -S mosh

Le client local lance ensuite une connexion SSH classique pour ouvrir la session. Il démarre le serveur Mosh à distance avec les mêmes identifiants que SSH. Vous n’avez donc pas besoin d’un service systemd permanent dédié à Mosh.

Lancer une session qui supporte les changements de réseau

La commande reprend la logique de SSH :

mosh utilisateur@serveur

Vous pouvez conserver vos options SSH habituelles avec --ssh. Exemple avec une clé et un port SSH différent :

mosh --ssh="ssh -i ~/.ssh/id_ed25519 -p 2222" utilisateur@serveur

Si vous changez de Wi-Fi ou basculez sur le partage de connexion, Mosh tente de retrouver la machine distante. La session peut rester figée quelques secondes, puis le terminal reprend sa place. Les commandes déjà envoyées ne sont pas rejouées, ce qui évite de relancer deux fois une opération sensible.

Pour une longue intervention distante, Mosh complète bien Screen sous Linux. Screen reste utile lorsque vous voulez détacher une session côté serveur et la reprendre plus tard, même après la fermeture du client.

Ouvrir la plage UDP si Mosh ne passe pas

Par défaut, Mosh utilise une plage UDP située entre 60000 et 61000. Si SSH fonctionne mais que Mosh reste bloqué après l’authentification, vérifiez le pare-feu du serveur et les règles du fournisseur réseau.

Avec UFW, vous pouvez ouvrir la plage complète :

sudo ufw allow 60000:61000/udp
sudo ufw status numbered

Sur un serveur exposé, je préfère limiter la source à votre adresse IP fixe quand c’est possible :

sudo ufw allow from 203.0.113.25 to any port 60000:61000 proto udp

Remplacez cette adresse par la vôtre. Si votre IP change régulièrement, la restriction devient difficile à maintenir. Dans ce cas, filtrez au moins l’accès au serveur en amont et ne laissez pas d’autres ports inutiles ouverts. Vous pouvez utiliser UFW sous Linux pour reprendre les règles existantes avant de modifier le pare-feu.

Vérifier la session et connaître les limites

Pour diagnostiquer une connexion Mosh, lancez le client en mode verbeux :

mosh -v utilisateur@serveur

Contrôlez aussi les sockets UDP côté serveur avec ss :

sudo ss -u -a -p | grep -E 'mosh|600[0-9]{2}'

Mosh est adapté au terminal interactif, pas à tous les usages SSH. Le transfert de fichiers avec scp, le port forwarding et certaines applications qui dépendent d’un flux TCP continu restent du ressort de SSH. Pour un tunnel, utilisez plutôt le transfert de port SSH.

Mosh ne chiffre pas un flux déjà lancé dans un tunnel SSH permanent et ne remplace pas une session persistante côté serveur. Pour une connexion instable, c’est néanmoins le choix le plus simple : installez le paquet des deux côtés, autorisez l’UDP nécessaire, puis testez une session avant de l’utiliser sur une opération critique.