Shell distant pour connexion instable

Pour administrer mes serveurs en déplacement rien de plus facile avec SSH et les réseaux mobiles. J’utilisais ainsi SSH via l’application ConnectBot sur Android. Si cette solution permet de dépanner elle présente quelques défauts.

Limites du SSH

Tout d’abord elle est très sensible à la qualité de la connexion. En effet le terminal est rapidement bloqué si le retour (echo) du serveur tarde à venir. Cela peut même provoquer un plantage de ConnectBot.

Ensuite quand la commande est longue comme par exemple un download ou une commande de compilation ou bien une commande de transcodage vidéo ou même une installation de paquet, une interruption de la connexion lui est fatal. On peut y remédier par l’utilisation d’un nohup mais ce dernier fait perdre la main sur la commande. De plus la commande qui part en nohup n’est plus accrochée à la connexion ssh quand le shell se termine.

La perte de connexion réseau est un réel problème pour les longues sessions de shell distant. C’est encore plus vrai même pour les courtes sessions quane la connectivité est mauvaise ou par intermittence comme dans le métro parisien !

Mosh le shell déconnecté

J’ai alors découvert Mosh. C’est un shell qui au lieu d’être connecté à un serveur ssh en TCP, envoie et reçoit ses paquets en UDP. La phase de connexion initiale se fait en SSH classique pour démarrer ensuite une session en UDP . Cette session en UDP survit aux interruptions réseaux !

Pour l’utilisateur client, mosh se presente comme un shell ssh. Quand il y a une perte de connexion, mosh indique par un message que la connexion réseaux est perdue, le terminal est alors bloqué puis quand le réseau revient, le terminal retrouve sont fonctionnement normal. Les commandes lancées sur le serveur continuent pendant la perte de connexion.

Installation

Mosh est un programme client/serveur. Il faut donc l’installer sur le serveur que l’on veut pouvoir atteindre vie un réseau intermittant. En root sur ma Debian

# apt-get install mosh

Termux le client Android le plus simple

Sur le client, il faut également installer mosh. Avec Android le plus simple est d’installer Termux. Cet emulateur de terminal fournit le paquet mosh.

pkg install mosh

L’utilisation de mosh est comme ssh

mosh user@server.net

On pourra avantageusement passer unr authentification par clé via une commande du type

mosh –ssh=”ssh -i /data/data/com.termux/files/usr/etc/ssh/ssh_host_ed25519_key” user@server.net

UserLand pour un client Linux sur Android

Si on veut rester dans un environnement familier en l’occurence Debian pour moi, le logiciel UserLand pour Android permet d’avoir une distribution Linux complète. A partir de là on installe mosh de manière classique. Pour Debian

sudo apt-get install mosh

UserLand permettra également de partager l’installation de mosh avec une session UserLand graphique. Mais le grand intérêt pour moi est de bénéficier de l’émulateur de terminal de UserLand que je trouve plus abouti que celui de Termux.

Paramétrage avec UserLand

Néanmoins les sessions Debian de UserLand sont un peu brutes. Il faut les personnaliser un peu. En effet mosh nécessite une locales UTF-8.

sudo apt-get install locale

Choisir alors une locales UTF-8, pour moi fr_FR.UTF-8

sudo dpkg-reconfigure locales

Mettre à la fin de .bashrc

LANG=”fr_FR.UTF-8″
export LANG

Sourcer le fichier

source .bashrc

Mosh est désormais utilisable.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.