SSH sans attendre : passez au multiplexing

Publié le 16/07/2025

C’est un cas un peu particulier, mais on veut parfois ouvrir plusieurs connexions SSH vers un même serveur ; et parfois, ouvrir ces connexions (ou les garder ouvertes) a un coût. 

Par exemple, je suis en train d’écrire un script tout pourri qui envoie des fichiers via rsync, puis se connecte via SSH pour lancer quelques commandes. Chaque ouverture de connexion prend ~3 secondes, et je lance ce script plusieurs fois d’affilée — donc à chaque fois, j’attends 6 secondes pour pas grand chose.

SSH permet de multiplexer plusieurs connexions à travers un seul socket, soit manuellement, soit automatiquement via quelques options de configuration. Dans mon cas, ça me permet d’attendre une fois 3 secondes, puis toutes les connexions suivantes passent par la même connexion, donc plus d’attente.

Manuellement

  • On ouvre le socket via ces options :
  • -f met la connexion en background
  • -N n’exécute rien sur le serveur distant (pas de shell, pas de commande, rien)
  • -M met la connexion en mode “Master”
  • -S spécifie le chemin du socket utilisé pour partager la connexion
ssh -N -f -M -S ~/.ssh/cm-socket debian@example.com

Puis, dans un autre terminal, on peut ouvrir une nouvelle connexion via le socket (avec l’option -S à nouveau) :

ssh -S ~/.ssh/cm-socket debian@example.com

En bonus, on peut aussi l’utiliser avec rsync en ajoutant cette option :

rsync -e "ssh -o ControlPath=~/.ssh/cm-socket" ...

Une fois fini, on peut fermer le socket avec :

ssh -S ~/.ssh/cm-socket -O exit debian@example.com

Automatiquement via ~/.ssh/config

On déclare un host avec ces options :

Host example.com
  HostName example.com
  User debian
  ControlMaster auto
  ControlPath ~/.ssh/cm-%r@%h:%p
  ControlPersist 10m

Et puis SSH s’occupe de tout.

Nos derniers articles