Tips : multiplexage de connexions SSH

Il vous est sûrement arrivé de devoir vous logguer plusieurs fois via SSH sur la même machine, et, par sécurité, vous ne voulez pas utiliser les clés sans passphrase. Amis aux doigts endoloris, ce tip est pour vous !

OpenSSH et les sockets

OpenSSH, bien connu pour ses vertues de communication / connexion sécurisées, offre bon nombre de déclinaisons d'utilisation, dont le X11 forwarding et notamment, beaucoup plus intéressant dans notre contexte, l'utilisation de sockets. On parle alors de multiplexage de connexion. Et donc, ça va beaucoup, beaucoup plus vite...

Une socket ?

Une socket, c'est en gros votre point d'entrée -et de sortie- lorsque vous voulez pousser un flux de données vers le reste du Monde (sortir de votre machine, quoi), mais il est tout-à-fait possible de l'utiliser en interne, en tablant avec lo (si, si, c'est la gentille interface d'adresse 127.0.0.1). Sous Unix, comme généralement tout, une socket est un simple fichier.

Le mode Master

Le mode Master constitue le point de départ du process. Il s'agit d'ouvrir la toute première connexion de votre machine sur l'hôte de destination -ici, host- avec l'utilisateur user. Ce mode, agrémenté d'une mention qui sert à dire où et comment créer la socket à laquelle s'attachera la connexion (-S <path>), va se charger de se frayer un chemin et d'en sortir tout ce qui nous faut.
# ssh user@host -M -S ~/.ssh/socket/ssh-socket-%r-%h-%p
Si vous allez voir un peu dans ~/.ssh/socket/, vous verrez notre fameuse socket ssh-socket-user-host-22. C'est ce fichier qui, réutilisé intelligemment, va faire le multiplexage.

Le mode Slave

Le mode Slave consiste exactement à ne faire rien d'autre que d'utiliser le chemin déjà ouvert par la connexion en mode Master. Pour ce faire, et pour éviter que SSH ne rouvre une autre négociation de connexion, il suffit de spécifier avec -S, l'emplacement de notre socket :
# ssh user@host -S ~/.ssh/socket/ssh-socket-%r-%h-%p
En réutilisant explicitement la socket, plus besoin de se ré authentifier, les 2 connexions utilisent alors le même canal. Forcément, ça va plus vite, c'est plus net niveau réseau, mais attention, les 2 connexions sont dépendantes l'une de l'autre (surtout les slaves de la master). Ce qui veut dire que SSH ne fermera pas la connexion Maîtresse tant que les connexions Slaves ne se seront pas fermées correctement. En revanche, la fermeture des Slaves ne posent pas de blocage au niveau du terminal.

On prend les mêmes et on automatise

Pour ne pas avoir 15 milles alias qui vous mettent à dos la responsabilité de les lancer dans l'ordre, rien ne vaut un petit tour dans votre /etc/ssh/ssh_config, rajoutez ces quelques lignes si vous n'avez pas de Host * de défini, sinon, enlevez simplement la partie Host * et concatenez :
Host *
	ControlMaster auto
	ControlPath ~/.ssh/sockets/ssh-socket-%r-%h-%p
Pour ceux qui veulent savoir exactement ce que cela fait, ControlMaster auto permet en fait de laisser SSH se charger de la détection de l'existence d'une socket pour la connexion à l'host demandée. Si elle n'existe pas encore, elle est créée dynamiquement, et la ligne ControlPath va spécifier exactement où et sous quelle forme. Relancez le service sshd, et testez. Le tour est joué.
Vus : 419
Publié par K-Tux : 59