Outils personnels

Tunnel SSH via un serveur intermédiaire

De wikiGite

A partir d'un poste, on veut atteindre un serveur externe, sur un port exotique (222, 81, 444, ...) ou non (25, 443, ...) à priori fermé en sortie par un proxy.

La syntaxe :

ssh -C -N -f -L port-local:ip-du-serveur-final:port-du-serveur-cible user@serveur-intermediaire

Un tunnel est ouvert entre le poste local et le serveur intermédiaire par SSH. Dans ce tunnel passe "port-local" (exemple : 80). Lorsque "serveur-intermédiaire" reçoit cette requête, il la redirige vers "port-du-serveur-cible" sur "serveur-cible".

On accède alors à serveur-cible en utilisant "localhost" et "port-local". la requête sur ce port passe dans le tunnel et est redirigée par serveur-intermediaire.

Pour utiliser un certificat (par exemple une connexion root entre le poste et serveur-intermediaire sans mot de passe, avec échange de clés DSA) reprendre les options standards de ssh :

ssh -C -N -f -L port-local:ip-du-serveur-final:port-du-serveur-cible user@serveur-intermediaire -i /<chemin>/<du>/<certificat>/<dsa>

En général, les certificats générés par ssh-keygen sont conservés sous $HOME/.ssh/id_dsa. De même pour utiliser un port ssh alternatif sur serveur intermediaire :

ssh -C -N -f -L port-local:ip-du-serveur-final:port-du-serveur-cible user@serveur-intermediaire -p <port-alternatif>

Toutes ces options sont combinables entre elles.

Exemples

Si on veut atteindre le port 443 (HTTPS) d'un serveur-cible, Mais les seuls ports disponibles sont le 80 (HTTP) et le 22 (SSH). :

ssh -C -N -f -L 80:www.serveur-cible.tld:443 user@serveur-intermediaire

"user" doit avoir le droit de se connecter sur serveur-intermediaire. Dans un navigateur, l'URL

https://localhost:80

accèdera par le tunnel au HTTPS (443) de serveur-cible.


Autre exemple : on veut ouvrir une connexion RDP (3389) vers un serveur qui n'autorise qu'une seule adresse IP en entrée, celle d'un serveur linux, et pas celle du poste qui lancera le client RDP.

ssh -C -N -f -L 3389:serveur-cible:3389 user@serveur-intermediaire

"serveur cible" recevra une requête 3389 (RDP) provenant de "serveur-intermediaire" dont l'IP est autorisée. Dans le client RDP, en mettant "localhost" comme nom de serveur, on accède au bureau à distance ou à TSE de serveur-cible, par le tunnel.