Dans une journée de simple mortel, il arrive parfois que je sois connecté à une dizaine d’environnements en SSH. Je fais des déploiements, du monitoring, des transferts de fichiers ou bien encore des mises à jour. Bref, tu l’auras compris, connecté un peu de manière permanente, j’ai plein de consoles ouvertes. Le problème, c’est que parfois je suis inactif sur l’une ou l’autre et du coup je perds la connexion SSH. C’est vraiment embêtant car ça bloque le terminal pendant quelques secondes et je dois me reconnecter.
L’idée serait donc d’envoyer une requête à intervalle régulier pour ne pas se faire déconnecter. Il y a deux solutions pour faire cela, l’une qui se fait au niveau du client (ma machine quoi) et l’autre au niveau du serveur.
Dans l’article ssh-keygen, je t’avais expliqué comment créer une clé SSH et comment configurer une connexion SSH sans mot de passe (via fichier de clé). Voici un exemple de configuration dans le fichier config (~/.ssh/config).
Et bien en fait, il y a une directive à rajouter qui est ServerAliveInterval et qui permet d’envoyer une requête toutes les x secondes. Dans l’exemple ci-dessous, j’ai choisi 120 secondes.
Il est également possible de configurer la même chose au niveau du serveur. Ça peut être pratique s’il y a plusieurs devs qui doivent se connecter en SSH et qui rencontrent le même problème.
Cette fois-ci, il faut se connecter en SSH, modifier le fichier /etc/ssh/sshd_config en rajoutant la ligne ClientAliveInterval et enfin, spécifier une valeur (toujours en seconde) de la même manière qu’au dessus.
La seule différence, c’est qu’il faut redémarrer le service SSH pour que la modification soit prise en compte.
Ça fonctionne, j’ai testé les deux solutions pendant plusieurs heures et je n’ai jamais eu de déconnexion.
12/06/2020
Yann Vangampelaere - nouslesdevs -