Empêcher une déconnexion SSH (timeout)

Voici comment éviter de se faire déconnecter par un serveur SSH lors de l'exécution de commandes longues.

J'ai récemment du résoudre une problématique d'exécution de scripts longs dans un contexte de déploiements par GitLab. Le script de déploiement est très spécifique à un client et il nécessite de lancer une série de commande par SSH.

Si les commandes venaient à durer trop longtemps, la connexion était perdue et je perdais l'accès à l'information d'une commande bien exécutée ou non.

J'ai dû passer une option en plus à la commande ssh pour cela, il s'agit l'option ServerAliveInterval [DURÉE]. Concrètement, elle renvoi un paquet au serveur régulièrement pour lui confirmer que l'on est toujours bien présents et que l'on attend juste que notre commande se termine !

Voici un exemple d'utilisation :

ssh -o "ServerAliveInterval 60" utilisateur@serveur.url "echo PREMIERE_COMMANDE &&
    cd PATH &&
    ...
"

Une autre solution peut consister à se tourner vers l'utilitaire "screen" qui permet de lancer un terminal, s'y connecter, lancer la commande à executer, "s'en détacher" et y revenir pour voir si la commande est terminée.

Je n'ai pas mis en œuvre cette technique, je pense qu'une limite peut être de récupérer l'état de l'avancement si vous voulez lancer ces commandes longues via une forge de déploiement / intégration en continu.

Ce site liste plusieurs autres techniques. À choisir selon vos besoins : https://www.tecmint.com/keep-remote-ssh-sessions-running-after-disconnection/

Commentaires

Votre commentaire

Le contenu de ce champ sera maintenu privé et ne sera pas affiché publiquement.
Votre adresse servira à afficher un Gravatar et à vous notifier des réponses. Votre commentaire sera anonymisé si ce billet est dépublié pendant plus de 3 mois.

À propos de Julien

Co-fondateur - Scrum master & Expert technique

Utilisateur de Drupal depuis 2008, j’ai fait mes armes comme développeur chez Commerce Guys puis me suis mis à encadrer les nouveaux arrivants avant de donner des formations, participer aux avant ventes et accompagner les équipes au passage à Scrum.

Je suis impliqué dans la communauté française de Drupal depuis 2009, j’ai été tour à tour président puis vice-président de l’association Drupal France et francophonie entre 2011 et 2013.