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 }