ssh et capistrano sur un long traitement (Connection reset by peer)

Avec capistrano il est fréquent que le déploiement prenne du temps, si le traitement est trop lourd capistrano "freeze".

Exemple : cap deploy:cleanup (quand on a 50 releases sur le serveur :-p)

Il faut régler sur le serveur dans /etc/ssh/sshd_config deux paramètres pour ne pas avoir de "freeze" :

ClientAliveInterval 5 

ClientAliveCountMax 1000

Issu de la documentation :

ClientAliveInterval
Règle un intervalle de temporisation en secondes après lequel, si aucune donnée n'est reçue de la part du client, sshd envoie un message dans le canal crypté pour demander une réponse du client. Par défaut 0, ce qui signifie que ces messages ne sont pas envoyés au client. Cette option ne s'applique qu'à la version 2 du protocole.
ClientAliveCountMax
Règle le nombre de messages de maintien de la connexion (voir ci-dessus) à envoyer sans réponse de la part du client pour sshd Si ce seuil est atteint tandis que les messages de maintien de la connexion ont été envoyés, sshd déconnecte le client et termine la session. Il est important de noter que ces messages de maintien de la connexion sont très différents de l'option KeepAlive (ci-dessous). Les messages de maintien de la connexion sont envoyés par le tunnel crypté, et par conséquent ne sont pas falsifiables. Le maintien de la connexion au niveau TCP activé par l'optionKeepAlive est falsifiable. Le mécanisme de maintien de la connexion est intéressant quand le client ou le serveur ont besoin de savoir si la connexion est inactive.

Par défaut 3. Si l'option ClientAliveInterval (ci-dessus) est réglée à 15, et ClientAliveCountMax est réglée à sa valeur par défaut, les clients ssh qui ne répondent pas sont déconnectés après environ 45 secondes.