Maintenir une connexion SSH ouverte

Rester connecté même en étant inactif

Déconnexion

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.

Solution

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.

Côté client

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).

Host nouslesdevs
        User u-nld
        Hostname 52.221.89.20
        IdentityFile ~/.ssh/rsa_key

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.

Host nouslesdevs
        User u-nld
        Hostname 52.221.89.20
        IdentityFile ~/.ssh/rsa_key
        ServerAliveInterval 120

Côté serveur

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.

ClientAliveInterval 120

La seule différence, c’est qu’il faut redémarrer le service SSH pour que la modification soit prise en compte.

/etc/init.d/ssh restart

Test

Ç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 -

Sinon jete un coup d’oeil aux autres catégories

Ma boîte aux lettres

Tu veux me demander quelque chose ?