Tunnel SSH avec l'option -R

Ce billet présente l’utilisation de l’option -R de la commande ssh qui permet par exemple de monter une connexion SSH dans le sens inverse.

Pour illustrer cette option, prenons le cas ou le “support” doit prendre la main en SSH sur la machine du “client”..mais sans que le “client” ne soit contraint d’autoriser dans son FireWall une connexion entrante vers le port SSH de son serveur.

-R Specifies that the given port on the remote (server) host is to be forwarded to the given host and port on the local side.

  • Le petit dessin illustrant la communication de l’exemple ci-dessous:

Yannick16Fev2005ssh-R

  • Blocage de l’accès en SSH à distance vers “client” (simulation d’un FireWall)

ListenAddress 127.0.0.1 dans le /etc/ssh/sshd_config de “client”

yannick@client:~$ netstat -ant|grep 22  
tcp 0 0 127.0.0.1:22 0.0.0.0:* LISTEN   
yannick@client:~$

Il est donc impossible à une autre machine distante, de se connecter de manière “normale” sur le port 22 de “client”…

  • Rien de spécial pour l’instant sur la machine “support”:
yannick@support:~$ netstat -ant |grep 1111  
yannick@support:~$
  • On fait lançer (par le client) la commande ssh -R sur la machine “client”:
ssh -R port-distant:HOSTNAME:port-local machine-distante
yannick@client:~$ ssh -R 1111:127.0.0.1:22 support

…on entre le mot de passe de “support”…on est connecté a “support”….

  • Sur la machine “support”:

… on a désormais le port 1111 d’ouvert:

yannick@support:~$ netstat -ant |grep 1111  
tcp 0 0 127.0.0.1:1111 0.0.0.0:* LISTEN  
yannick@support:~$

…en se connectant sur le port 1111 de “support” on arrive donc sur le port 22 du “client”:

yannick@support:~$ ssh -p1111 127.0.0.1  

…demande le mot de passe de “client”…on est connecté sur le ssh de “client”

  • Fin:

Il suffira au “client” de faire exit et un CTRL+C pour couper la connexion du “support”

yannick@client:~$ Connection to 127.0.0.1 closed by remote host.  
Connection to 127.0.0.1 closed.  
yannick@support:~$
  • La même chose en graphique avec putty:

Yannick16Fev2005ssh-R-Putty

  • Il est à noter qu’il est possible de maintenir le tunnel ouvert même en quittant la session en utilisant screen.