diff --git a/deploy.sh b/deploy.sh index 44eff2a..944d9a4 100644 --- a/deploy.sh +++ b/deploy.sh @@ -22,20 +22,29 @@ cleanup_dead_ssh() { # Attendre un peu pour que la fermeture se termine sleep 0.5 fi - # Forcer la suppression du socket même s'il existe encore - rm -f "${SSH_CONTROL_PATH}" 2>/dev/null || true - # Nettoyer aussi le répertoire parent s'il est vide - rmdir "${SSH_CONTROL_DIR}" 2>/dev/null || true + # Forcer la suppression du socket et du répertoire parent + # Supprimer le répertoire entier garantit que le socket est vraiment supprimé + rm -rf "${SSH_CONTROL_DIR}" 2>/dev/null || true + # Recréer le répertoire pour les prochaines connexions + mkdir -p "${SSH_CONTROL_DIR}" 2>/dev/null || true } # Fonction pour vérifier si la connexion SSH maître est valide check_ssh_connection() { - ssh -O check -o ControlPath="${SSH_CONTROL_PATH}" ${SERVER} 2>/dev/null || return 1 + # 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 + ssh -o ControlPath="${SSH_CONTROL_PATH}" ${SERVER} "true" 2>/dev/null || return 1 + return 0 } # Fonction pour exécuter une commande SSH avec connexion persistante ssh_exec() { - # Nettoyer le socket s'il existe mais est invalide + # Toujours vérifier et nettoyer le socket avant chaque commande + # pour éviter les sockets morts qui causent "ControlSocket already exists, disabling multiplexing" if [ -S "${SSH_CONTROL_PATH}" ]; then if ! check_ssh_connection; then # Connexion morte, nettoyer avant d'exécuter @@ -44,6 +53,8 @@ ssh_exec() { fi # Exécuter la commande SSH (une seule tentative, pas de retry) + # ControlMaster=auto va créer une nouvelle connexion si le socket n'existe pas, + # ou réutiliser s'il est valide ssh -o ControlMaster=auto \ -o ControlPath="${SSH_CONTROL_PATH}" \ -o ControlPersist=300 \