From b22259ff2fe5fb51acfb372c5ad237229868c6e2 Mon Sep 17 00:00:00 2001 From: Nicolas Cantu Date: Tue, 6 Jan 2026 14:47:46 +0100 Subject: [PATCH] Remove SSH multiplexing to eliminate connection errors MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit **Motivations:** - SSH multiplexing (ControlMaster) was causing connection reset errors - Complex socket management was creating more problems than it solved - Script makes sequential SSH calls, so multiplexing not necessary - Simpler is better - remove unnecessary complexity **Root causes:** - ControlMaster multiplexing was added to avoid MaxStartups errors - But it caused connection reset, socket invalidation, and cleanup issues - Root cause: unnecessary complexity that created more problems than it solved - Sequential SSH calls don't need multiplexing anyway **Correctifs:** - Removed all ControlMaster/ControlPath configuration - Removed cleanup_dead_ssh() function - Removed cleanup_ssh() trap - Removed SSH_CONTROL_DIR and SSH_CONTROL_PATH variables - Simplified ssh_exec() to basic SSH call without multiplexing - Kept only ConnectTimeout for basic connection management **Evolutions:** - Much simpler code without socket management complexity - No more connection reset errors from multiplexing - No more socket cleanup issues - Each SSH call is independent and reliable **Pages affectées:** - deploy.sh: Removed all ControlMaster multiplexing code, simplified to basic SSH --- deploy.sh | 43 ++----------------------------------------- 1 file changed, 2 insertions(+), 41 deletions(-) diff --git a/deploy.sh b/deploy.sh index 541fcfc..b128c63 100644 --- a/deploy.sh +++ b/deploy.sh @@ -8,50 +8,11 @@ DOMAIN="zapwall.fr" APP_DIR="/var/www/${DOMAIN}" GIT_REPO="https://git.4nkweb.com/4nk/story-research-zapwall.git" -# Configuration SSH pour connexion persistante (évite MaxStartups) -# Utiliser un chemin temporaire sans espaces pour ControlPath -SSH_CONTROL_DIR="/tmp/ssh_control_$$" -mkdir -p "${SSH_CONTROL_DIR}" -SSH_CONTROL_PATH="${SSH_CONTROL_DIR}/debian_92.243.27.35_22" - -# Fonction pour nettoyer une connexion SSH morte -cleanup_dead_ssh() { - # Essayer de fermer proprement la connexion si elle existe - if [ -S "${SSH_CONTROL_PATH}" ]; then - ssh -O exit -o ControlPath="${SSH_CONTROL_PATH}" ${SERVER} 2>/dev/null || true - # Attendre un peu pour que la fermeture se termine - sleep 0.5 - fi - # 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 exécuter une commande SSH avec connexion persistante +# Fonction pour exécuter une commande SSH ssh_exec() { - # 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=300 \ - -o ConnectTimeout=10 \ - ${SERVER} "$@" 2>&1 + ssh -o ConnectTimeout=10 ${SERVER} "$@" 2>&1 } -# Nettoyer les connexions SSH persistantes et le répertoire temporaire à la fin -cleanup_ssh() { - cleanup_dead_ssh - rm -rf "${SSH_CONTROL_DIR}" 2>/dev/null || true -} -trap cleanup_ssh EXIT - # Vérifier qu'un message de commit est fourni if [ -z "$1" ]; then echo "Erreur: Un message de commit est requis"