Table des matières

Utilisation d’un tunnel ssh pour accéder à un poste fixe non accessible directement depuis internet

En faisant cette opération, vous contrevenez peut-être à la PSSI mise en place par votre entité. C’est à vous qu’il appartient de le vérifier avant d’utiliser les informations qui suivent.

Concept

Dès lors qu’une même machine est accessible par le protocole ssh depuis les deux machines que vous souhaitez mettre en relation, il est possible de les mettre en relation par cet intermédiaire. En fonction de la configuration du réseau et des services ssh, il pourra y avoir des variations. Nous considérons ici que les différents serveurs ssh écoutent sur le port standard (22) — à adapter au besoin à votre configuration. De même, si le USERNAME n’est pas le même sur tous les postes il faudra préfixer les noms des machines par le username@ adéquat.

Configuration sur le poste à joindre

ssh -R PORT:localhost:22 COMMUN

Avec (par exemple) :

COMMUN = gw.info.unicaen.fr
PORT   = 2222 # il doit être libre et > 1024

Pour que cela fonctionne en permanence, vous pouvez envisager de lancer cette commande dans un screen ou tmux. Si vous n’avez pas besoin d’une session interactive, l’option de la commande ssh qui vous intéresse est « -N ». Au niveau suivant se situe l’automatisation de la connexion (cron, at, service …). Attention, si vous utilisez l’authentification par clef publique, il faut protéger la clef privée. Si vous utilisez l’authentification par mot de passe, vous ne devriez pas songer à l’automatisation de toute façon. Une connexion en dehors d’un terminal (cron par exemple) nécessitera l’utilisation de l’option « -tt » du client ssh. Si vous ne savez pas à quoi cela correspond, vous devriez lire le manuel de la commande ssh.

Connexion vers le poste à joindre

Depuis votre poste vous utilisez la commande :

ssh -J COMMUN -p PORT localhost

Si votre nom d’utilisateur local n’est pas le même que votre PersoPass de l’université, il est nécessaire de préciser celui-ci :

ssh -J persopass@COMMUN -p PORT persopass@localhost

Si votre version de ssh est ancienne, elle ne connaît peut-être pas l'option -J (qui a été ajoutée dans OpenSSH 7.3). Cependant cette option n'est qu'un alias de la commande suivante :

ssh -o ProxyCommand="ssh persopass@COMMUN -W %h:%p" -p PORT persopass@localhost

Rendre le tunnel et le saut transparents à l'utilisation

Ça peut être un peu pénible de taper ces commandes à chaque fois qu'on souhaite se connecter au poste à joindre, et cela empêche d'utiliser simplement scp ou sftp pour transférer des données.

Le plus pratique est de placer le contenu suivant dans le ~/.ssh/config de la machine où vous devez taper les commandes, en remplaçant POSTEÀJOINDRE par un nom qui vous plaît :

Host POSTEÀJOINDRE
  User persopass
  HostName localhost
  Port PORT
  ProxyCommand ssh persopass@COMMUN -W %h:%p

Pour vous connecter il vous suffira alors de faire ssh POSTEÀJOINDRE (et vous pourrez utiliser POSTEÀJOINDRE comme nom de machine pour les commandes scp et sftp).