Établir une nouvelle connexion SSH ne prend en général que quelques secondes. Si on doit se connecter plusieurs fois au même serveur, ces secondes s’ajoutent et ça finit, en ce qui me concerne, par être ennuyeux. Sont impactés, tous les services utilisant SSH, par exemple, git, svn, rsync, etc.

Une solution assez méconnue de SSH consiste à réutiliser une connexion déjà établie, ce qui signifie que l’on n’a qu’une seule phase d’authentification et que les connexions suivantes vers un même serveur sont quasi instantanées.

Pour ce faire, rien de plus simple, on édite son fichier ~/.ssh/config et on ajoute au début du fichier les lignes suivantes.

Host *
ControlMaster auto
ControlPath ~/.ssh/sockets/%r@%h-%p
ControlPersist 3600

Puis on crée le dossier ~/.ssh/sockets/.

mkdir ~/.ssh/sockets
chmod 700 ~/.ssh/sockets

Voici les explications de la configuration, ligne par ligne.

Host *

Ceci signifie que les paramètres suivants vont pouvoir s’appliquer sur tous les serveurs sur lesquels on va se connecter. On peut restreindre un domaine en utilisant, par exemple, Host *.chezmoi.fr.

ControlMaster auto

Le paramètre ControlMaster indique à SSH de réutiliser une connexion déjà existante vers un serveur si elle existe déjà. En se connectant deux fois au même serveur, la deuxième connexion est plus rapide car l’authentification ainsi que la connexion TCP sont déjà faites. Les deux connexions utilisent le multiplexage.

ControlPath ~/.ssh/sockets/%r@%h-%p

Le paramètre ControlPath indique à SSH où aller stocker et chercher les fichiers de type socket sur le disque.

ControlPersist 3600

Le paramètre ControlPersist indique que le fichier de type socket doit être valide 3600 secondes, dans notre cas. Ceci autorise par exemple de fermer toutes les connexions puis de se reconnecter immédiatement. Cela permet aussi d’éviter des déconnexions brutales dans le cas où la première connexion SSH serait fermée.

Plus d’informations en faisant un man ssh_config.