← retour aux snippets

ssh: multiplexage de connexions rapide

Réutiliser une connexion SSH pour accélérer ssh/scp/git, avec keepalive et sécurité.


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/%C utilise 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.
  • ControlPersist garde la session maître ouverte après la fermeture du dernier client; ajustez la durée selon vos besoins.
  • combinez avec ProxyJump pour 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.