Remove check_ssh_connection that causes connection reset errors
**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()
This commit is contained in:
parent
b096efe072
commit
03d0c6e4bc
48
deploy.sh
48
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
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user