Avantage de cette fonctionnalité
Cette fonctionnalité peut être intéressante dans certains cas : elle permet la réutilisation d'une connexion SSH déjà ouverte, ce qui permet notamment de ne pas avoir à s'authentifier à nouveau.
C'est surtout intéressant lorsqu'on s'authentifie au serveur à l'aide d'un mot de passe ou qu'on utilise une clef SSH mais qu'on ne dispose pas d'agent SSH qui retient en mémoire une clef SSH dont on a déjà saisi le mot de passe.
Configuration de la réutilisation de connexions
L'activation de cette fonctionnalité se fait dans le fichier de configuration
du client ssh
, ~/.ssh/config
, donc le fichier .ssh/config
du répertoire
personnel de votre compte.
On devra y ajouter les directives ControlMaster
et ControlPath
:
ControlMaster
contrôle si la connexion principale doit être créée ou si une connexion doit être réutilisée. Cette directive peut être complétée des mots :yes
: indique que la connexion principale doit être créée. Elle sera à l'écoute de la création d'autres connexions au même compte distant sur le socket Unix désigné parControlPath
(voir ci-dessous). Ces nouvelles connexions seront alors mutualisées sur la même connexion réseau ;no
: indique qu'une connexion existante doit être réutilisée. Si aucune n'existe, la connexion réseau se fera normalement, sans création d'une connexion principale réutilisable ;ask
: équivaut àyes
mais demande d'abord confirmation auprès du programmessh-askpass
(pour une interface généralement graphique) ou un équivalent désigné par la variable d'environnementSSH_ASKPASS
;auto
: le client va tenter de réutiliser une connexion principale, mais si elle n'existe pas, il va la créer ;autoask
: identique àauto
, mais après demande de confirmation à l'utilisateur comme avecask
.
ControlPath
définit le nom du socket de contrôle à créer/utiliser. Elle doit dépendre du nom du serveur, du port, et de l'utilisateur distant, puisque seules les connexion réseaux ayant ces points en commun peuvent être mutualisées. Des séquences de caractères spéciales peuvent être utilisés dans le nom de la socket pour être remplacés par des caractéristiques de la connexion :%r
représente la nom d'utilisateur distant ;%h
représente la nom de la machine distante ;%p
représente le port du serveur distant. On peut ainsi utiliser par exemple la valeur~/.ssh/socket1-%r@%h:%p
.
Utiliser un fichier socket placé dans le répertoire /tmp
(plutôt que dans
~/.ssh/
comme dans l'exemple donné ci-dessus) peut être intéressant car le
fichier sera supprimé en cas de crash de la machine. Dans le cas contraire, le
client SSH génèrera une erreur à cause de la tentative de connexion avec un
socket mort, qui devra être supprimé manuellement.
Exemple de configuration avec réutilisation de connexion
Voici un exemple de configuration dans ~/.ssh/config
entraînant la création
d'un socket dans le répertoire .ssh
permettant la réutilisation de
connexion :
Host machine1
Hostname machine1.example.com
User hkrustofski
IdentityFile /home/krusty/.ssh/id_special
ControlMaster auto
ControlPath ~/.ssh/domaine-%r@%h:%p
Avec cette configuration, l'utilisation de la commande ssh machine1
ouvrira
une connexion à machine1.example.com
en créant une connexion principale s'il
n'en existe pas encore, ou bien en réutilisant une éventuelle connexion déjà
existante qui sera mutualisée à grâce au socket
/home/krusty/.ssh/domaine-hkrustofski@machine1.example.com:22
.
Lors de l'utilisation d'une connexion mutualisée, le transfert de connexion X11 ou d'agent SSH est possible, mais l'écran ou l'agent transféré seront ceux de la connexion principale. Autrement dit, il n'est pas possible de transférer plus d'un écran ou agent SSH.