Remove SSH multiplexing to eliminate connection errors
**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
This commit is contained in:
parent
03d0c6e4bc
commit
b22259ff2f
43
deploy.sh
43
deploy.sh
@ -8,50 +8,11 @@ DOMAIN="zapwall.fr"
|
|||||||
APP_DIR="/var/www/${DOMAIN}"
|
APP_DIR="/var/www/${DOMAIN}"
|
||||||
GIT_REPO="https://git.4nkweb.com/4nk/story-research-zapwall.git"
|
GIT_REPO="https://git.4nkweb.com/4nk/story-research-zapwall.git"
|
||||||
|
|
||||||
# Configuration SSH pour connexion persistante (évite MaxStartups)
|
# Fonction pour exécuter une commande SSH
|
||||||
# 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
|
|
||||||
ssh_exec() {
|
ssh_exec() {
|
||||||
# Laisser SSH gérer ControlMaster automatiquement
|
ssh -o ConnectTimeout=10 ${SERVER} "$@" 2>&1
|
||||||
# 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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# 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
|
# Vérifier qu'un message de commit est fourni
|
||||||
if [ -z "$1" ]; then
|
if [ -z "$1" ]; then
|
||||||
echo "Erreur: Un message de commit est requis"
|
echo "Erreur: Un message de commit est requis"
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user