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.
Tags: Android Mosh shell SSH UserLand