Il arrive souvent
que les machines d’un réseau de développement ne soit pas accessibles depuis l’extérieur à l’exception d’une machine jouant
le rôle de porte d’entrée (frontdoor.mydomain.com).
Pour accéder depuis
l’extérieur aux machines internes on établit depuis son poste externe une première
connexion ssh avec frontdoor.mydomain.com
puis, de là, on établit une seconde connexion ssh vers la machine interne sur
laquelle on veut travailler. Donc une opération en deux temps.
On peut simplifier
ceci en établissant des ‘tunnels’ entre le frontdoor et les machines internes
qui vont faire en sorte qu’une connexion sur le port 8001 du frontdoor donne
directement accès à dev1, qu’une connexion sur le port 8002 du frontdoor donne
directement accès à dev2 etc…
On établit donc
un tunnel entre le port 8001 du frontdoor et le port 22 de dev,
puis un tunnel entre le port 8002 du frontdoor et le port 22 de dev2 etc…
puis un tunnel entre le port 8002 du frontdoor et le port 22 de dev2 etc…
Pour cela on se
connecte sur le frontdoor et on exécute par exemple ces 2 commandes pour établir deux tunnels :
ssh -N -f -L 8001:localhost:22 devusr1@dev1.mydomain.com
ssh -N -f -L 8002:localhost:22 devusr2@dev2.mydomain.com
Chaque commande
va demander le mot passe pour se connecter
avec le user voulu à la machine interne
qui sera l’extrémité ‘22’ du tunnel. Si la clé publique du user de
frontdoor est acceptée par le devusr coté
machine de développement aucun mot de passe n’est demandé. (Cette possibilité est très utilise si on veut automatiser l’établissement et la supervision de ces tunnels)
Ceci fait on peut
fermer la session avec le frontdoor, les tunnels resteront actifs.
Maintenant, pour
se connecter sur dev1 depuis l’extérieur on tape
ssh –p 8001 usr@frontdoor.mydomaine.com
et bien sur la
commande suivante vous loguera sur dev2
ssh –p 8002 usr@frontdoor.mydomaine.com
La demande de mot de passe sera pour l'utilisateur 'usr' sur frontdoor. Là aussi on peut aussi utiliser un système de clés.
NOTE
Du point de vue
de la machine interne (dev1 ou dev2) vous êtes un utilisateur connecté depuis
127.0.0.1 pas depuis frontdoor. Facile à vérifier avec la commande ‘who ‘
Il y a plein d'autre utilisations de cette technique du 'Local Port Forwarding'. Mais attention au firewall qui peut se trouver devant le frontdoor et qui pourrait bloquer l’accès aux ports d'entré du tunnel (8001, 8002 dans notre exemple)
Il y aussi des variantes de cette technique :
- Remote port forwarding (on établit le tunnel dans l'autre sens en utilisant ssh -R à la place de ssh -L)
- Dynamic port forwarding (plus complexe et nécessite la configuration SOCKS)