Table des matières
Utilisation d’un tunnel ssh pour accéder à un poste fixe non accessible directement depuis internet
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
).