diff --git a/deploy.sh b/deploy.sh index ec4a601..d43172b 100644 --- a/deploy.sh +++ b/deploy.sh @@ -37,7 +37,12 @@ check_ssh_connection() { 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 - ssh -o ControlPath="${SSH_CONTROL_PATH}" ${SERVER} "true" 2>/dev/null || return 1 + # 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 } @@ -55,34 +60,21 @@ ssh_exec() { fi # Exécuter la commande SSH (une seule tentative, pas de retry) - # Capture stderr pour détecter les erreurs de socket - local ssh_output - ssh_output=$(ssh -o ControlMaster=auto \ + # 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 + ssh -o ControlMaster=auto \ -o ControlPath="${SSH_CONTROL_PATH}" \ - -o ControlPersist=300 \ + -o ControlPersist=60 \ -o ConnectTimeout=10 \ - -o ServerAliveInterval=60 \ - -o ServerAliveCountMax=3 \ - ${SERVER} "$@" 2>&1) - local ssh_exit_code=$? - - # Si on détecte une erreur de socket, nettoyer et réessayer une fois - if echo "$ssh_output" | grep -q "ControlSocket.*already exists"; then - cleanup_dead_ssh - # Réessayer une fois après nettoyage - ssh -o ControlMaster=auto \ - -o ControlPath="${SSH_CONTROL_PATH}" \ - -o ControlPersist=300 \ - -o ConnectTimeout=10 \ - -o ServerAliveInterval=60 \ - -o ServerAliveCountMax=3 \ - ${SERVER} "$@" 2>&1 - return $? - fi - - # Afficher la sortie et retourner le code de sortie - echo "$ssh_output" - return $ssh_exit_code + -o ServerAliveInterval=15 \ + -o ServerAliveCountMax=2 \ + -o TCPKeepAlive=yes \ + -o Compression=no \ + ${SERVER} "$@" 2>&1 } # Nettoyer les connexions SSH persistantes et le répertoire temporaire à la fin