From 03d0c6e4bc4b523b5f4126b658b4570f2506f07c Mon Sep 17 00:00:00 2001 From: Nicolas Cantu Date: Tue, 6 Jan 2026 14:46:33 +0100 Subject: [PATCH] Remove check_ssh_connection that causes connection reset errors MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit **Motivations:** - check_ssh_connection() was causing connection reset errors - Trying to use a potentially dead ControlMaster connection for checking interferes with multiplexing - SSH ControlMaster=auto can handle invalid sockets automatically **Root causes:** - check_ssh_connection() uses ssh with ControlPath to test connection - If connection is dead, this causes 'Connection reset by peer' errors - This check interferes with ControlMaster multiplexing - Root cause: unnecessary pre-check that causes more problems than it solves **Correctifs:** - Removed check_ssh_connection() function completely - Removed pre-execution connection validation from ssh_exec() - Let SSH ControlMaster=auto handle invalid sockets automatically - SSH will detect invalid socket and create new connection automatically - Removed unnecessary keepalive options (not needed if no firewall/NAT issues) - Simplified to basic ControlMaster configuration **Evolutions:** - Simpler code without interference from connection checks - SSH handles connection management automatically - No more connection reset errors from check_ssh_connection() **Pages affectées:** - deploy.sh: Removed check_ssh_connection() and simplified ssh_exec() --- deploy.sh | 48 ++++++++---------------------------------------- 1 file changed, 8 insertions(+), 40 deletions(-) diff --git a/deploy.sh b/deploy.sh index d43172b..541fcfc 100644 --- a/deploy.sh +++ b/deploy.sh @@ -29,51 +29,19 @@ cleanup_dead_ssh() { mkdir -p "${SSH_CONTROL_DIR}" 2>/dev/null || true } -# Fonction pour vérifier si la connexion SSH maître est valide -check_ssh_connection() { - # Vérifier si le socket existe - if [ ! -S "${SSH_CONTROL_PATH}" ]; then - return 1 - fi - # Tester la connexion en essayant de l'utiliser avec une commande simple - # Cela détecte si le socket existe mais la connexion est morte - # Utiliser les mêmes options de keepalive pour la cohérence - ssh -o ControlPath="${SSH_CONTROL_PATH}" \ - -o ServerAliveInterval=15 \ - -o ServerAliveCountMax=2 \ - -o TCPKeepAlive=yes \ - ${SERVER} "true" 2>/dev/null || return 1 - return 0 -} - # Fonction pour exécuter une commande SSH avec connexion persistante ssh_exec() { - # Toujours vérifier et nettoyer le socket avant chaque commande - # pour éviter les sockets morts qui causent "ControlSocket already exists, disabling multiplexing" - # Le socket peut devenir invalide pendant l'exécution d'une commande précédente, - # donc on vérifie systématiquement avant chaque nouvelle commande - if [ -S "${SSH_CONTROL_PATH}" ]; then - if ! check_ssh_connection; then - # Connexion morte, nettoyer avant d'exécuter - cleanup_dead_ssh - fi - fi - - # Exécuter la commande SSH (une seule tentative, pas de retry) - # Configuration optimisée pour éviter les coupures de connexion : - # - ServerAliveInterval=15 : Keepalives toutes les 15 secondes (au lieu de 60) - # pour éviter que les firewalls/NAT ferment les connexions inactives - # - TCPKeepAlive=yes : Utilise les keepalives TCP au niveau système - # - ServerAliveCountMax=2 : Détecte les connexions mortes plus rapidement - # - ControlPersist=60 : Réduit le temps de persistance pour éviter les sockets morts + # Laisser SSH gérer ControlMaster automatiquement + # ControlMaster=auto va : + # - Créer une nouvelle connexion maître si le socket n'existe pas + # - Réutiliser la connexion existante si le socket est valide + # - Détecter si le socket est invalide et créer une nouvelle connexion (mais laisse le socket mort) + # Pour éviter l'accumulation de sockets morts, on nettoie le répertoire au début de chaque déploiement + # et on laisse SSH gérer le reste automatiquement ssh -o ControlMaster=auto \ -o ControlPath="${SSH_CONTROL_PATH}" \ - -o ControlPersist=60 \ + -o ControlPersist=300 \ -o ConnectTimeout=10 \ - -o ServerAliveInterval=15 \ - -o ServerAliveCountMax=2 \ - -o TCPKeepAlive=yes \ - -o Compression=no \ ${SERVER} "$@" 2>&1 }