objectif
Accélérer drastiquement les connexions SSH répétées (ssh, scp, git@) en réutilisant une session maître persistante, avec timeouts et chemins sûrs.
code minimal
# préparer un répertoire pour les sockets (droits stricts)
install -d -m 0700 ~/.ssh/cm
# config de base (~/.ssh/config) pour réutiliser la connexion 10 minutes
cat >> ~/.ssh/config <<'SSHCONF'
Host *
ControlMaster auto
ControlPersist 10m
ControlPath ~/.ssh/cm/%C
ServerAliveInterval 60
ServerAliveCountMax 3
IdentitiesOnly yes
SSHCONF
utilisation
# 1) première connexion (crée la session maître)
ssh user@serveur.data.pm
# 2) connexions suivantes (instantanées tant que la session persiste)
ssh user@serveur.data.pm
scp fichier.txt user@serveur.data.pm:/tmp/
# état/gestion de la session maître
ssh -O check user@serveur.data.pm # statut
ssh -O exit user@serveur.data.pm # fermer proprement
# config par hôte (exemple: bastion et prod)
cat >> ~/.ssh/config <<'SSHCONF'
Host bastion
HostName bastion.data.pm
User ops
Host prod
HostName app.internal
User deploy
ProxyJump bastion
ControlMaster auto
ControlPersist 30m
ControlPath ~/.ssh/cm/%C
SSHCONF
# test
ssh prod
variante(s) utile(s)
# forcer temporairement un chemin de socket (sans toucher au fichier config)
ssh -o ControlMaster=auto -o ControlPersist=5m -o ControlPath="$HOME/.ssh/cm/%C" host
# démarrer une session maître en arrière-plan, puis réutiliser
ssh -MNf bastion
ssh -J bastion prod
# limiter la portée (désactiver le multiplexage pour un hôte sensible)
cat >> ~/.ssh/config <<'SSHCONF'
Host audit-host
ControlMaster no
SSHCONF
# sockets trop longs ? utiliser un chemin très court
install -d -m 0700 ~/.cm
sed -i.bak 's|~/.ssh/cm/%C|~/.cm/%C|' ~/.ssh/config && rm -f ~/.ssh/config.bak
# garder une session active en CI pour accélérer une série d'actions
ssh -MNf prod
scp build.tgz prod:/srv/
ssh prod 'tar -xf /srv/build.tgz -C /srv/app'
ssh -O exit prod
notes
ControlPath ~/.ssh/cm/%Cutilise un hash des paramètres, évitant les chemins trop longs et les collisions.- permissions strictes (0700) sur le dossier des sockets sont indispensables sur un système multi-utilisateur.
ControlPersistgarde la session maître ouverte après la fermeture du dernier client; ajustez la durée selon vos besoins.- combinez avec
ProxyJumppour des sauts via bastion, sans pénalité de latence sur chaque commande. - évitez d’héberger les sockets sur des FS partagés (NFS); préférez un disque local utilisateur.