Tunnel SSH inversé


Qu’est-ce que le tunnel SSH inversé (Reverse SSH Tunneling)? (et comment l’utiliser)
Besoin de SSH sur un ordinateur Linux distant inaccessible?
Demandez-lui de vous appeler, puis creusez cette connexion pour obtenir votre propre session SSH distante.

Traduction du post “What Is Reverse SSH Tunneling? (and How to Use It)”
Dave McKay July 18, 2019, 9:00am EDT

Quand utiliser le tunneling SSH inverse

Parfois, les ordinateurs distants peuvent être difficiles à atteindre. Le site sur lequel ils se trouvent peut avoir des règles de pare-feu strictes, ou peut-être l’administrateur local a-t-il configuré des règles complexes de traduction d’adresses réseau . Comment pouvez-vous atteindre un tel ordinateur si vous devez vous y connecter?

  • Établissons des étiquettes
    • Votre ordinateur est l’ordinateur local car il est proche de vous.
    • L’ordinateur auquel vous allez vous connecter est l’ordinateur distant, car il se trouve dans un emplacement différent de celui où vous vous trouvez.

Pour différencier les ordinateurs locaux des ordinateurs distants utilisés dans cet article, l’ordinateur distant s’appelle «howtogeek» et exécute Ubuntu Linux (avec des fenêtres de terminal violettes). L’ordinateur local s’appelle «Sulaco» et exécute Manjaro Linux (avec des fenêtres de terminal jaunes).

Normalement, vous établissez une connexion SSH à partir de l’ordinateur local et vous connectez à l’ordinateur distant. Ce n’est pas une option dans le scénario de réseau que nous décrivons. Le problème spécifique du réseau importe peu: cela est utile lorsque vous ne pouvez pas utiliser SSH directement sur l’ordinateur distant.

Mais si la configuration réseau de votre côté est simple, l’ordinateur distant peut se connecter à vous. Toutefois, cela ne suffit pas à vos besoins, car cela ne vous fournit pas une session de ligne de commande opérationnelle sur l’ordinateur distant. Mais c’est un début. Vous avez une connexion établie entre les deux ordinateurs.

La réponse réside dans le tunnel SSH inversé (Reverse SSH Tunneling).

Qu’est-ce que le tunnel SSH inversé?

Le tunneling SSH inversé vous permet d’utiliser la connexion établie pour établir une nouvelle connexion entre votre ordinateur local et l’ordinateur distant.

Parce que la connexion d’origine vous a été fournie par l’ordinateur distant, l’utiliser pour aller dans le sens opposé l’utilise «en sens inverse». Et parce que SSH est sécurisé, vous établissez une connexion sécurisée au sein d’une connexion sécurisée existante. Cela signifie que votre connexion à l’ordinateur distant agit comme un tunnel privé dans la connexion d’origine.

Et nous arrivons au nom de «tunnel SSH inversé (reverse SSH tunneling)».

Comment ça marche?

Le tunneling SSH inversé repose sur l’ordinateur distant qui utilise la connexion établie pour écouter les nouvelles demandes de connexion émanant de l’ordinateur local.

L’ordinateur distant écoute sur un port réseau de l’ordinateur local. S’il détecte une requête SSH sur ce port, il relaie cette requête à lui-même, via la connexion établie. Ceci fournit une nouvelle connexion de l’ordinateur local à l’ordinateur distant.

Utilisation du SSH Reverse Tunneling

SSH sera déjà installé sur votre ordinateur local Linux, mais vous devrez peut-être démarrer le démon SSH (sshd) si l’ordinateur local n’a jamais utilisé les connexions SSH.

sudo systemctl start sshd 

Pour que le démon SSH démarre à chaque redémarrage de votre ordinateur, utilisez cette commande:

sudo systemctl enable sshd

Sur l’ordinateur distant, nous utilisons la commande suivante.

ssh -R 43022:localhost:22 dave@sulaco.local
  • L’option -R (reverse) indique à ssh que de nouvelles sessions SSH doivent être créées sur l’ordinateur distant.
  • 43022:localhost:22 indique à ssh que les demandes de connexion au port 43022 de l’ordinateur local doivent être transmises au port 22 de l’ordinateur distant. Le port 43022 a été choisi car il est répertorié comme étant non alloué . Ce n’est pas un numéro spécial.
  • dave@sulaco.local est le compte d’utilisateur auquel l’ordinateur distant va se connecter sur l’ordinateur local.

Vous pouvez être averti de ne jamais vous être connecté à l’ordinateur local auparavant. Vous pouvez également voir un avertissement lorsque les détails de la connexion sont ajoutés à la liste des hôtes SSH reconnus. Ce que vous voyez, le cas échéant, dépend du fait que des connexions aient déjà été établies entre l’ordinateur distant et l’ordinateur local.

Vous serez invité à entrer le mot de passe du compte que vous utilisez pour vous connecter à l’ordinateur local.

Détails de la connexion SSH dans une fenêtre de terminal

Notez que lorsque la connexion est établie, l’invite de commande passe de dave@howtogeek à dave@sulaco

Nous sommes maintenant connectés à l’ordinateur local à partir de l’ordinateur distant. Cela signifie que nous pouvons lui donner des commandes. Utilisons la commande who pour voir les connexions sur l’ordinateur local.

who

la commande who dans une fenêtre de terminal

Nous pouvons voir que la personne avec le compte d’utilisateur appelé Dave a ouvert une session sur l’ordinateur local et que l’ordinateur distant s’est connecté (avec les mêmes informations d’identification d’utilisateur) à partir de l’adresse IP 192.168.4.25.

CONNEXES: How to Determine the Current User Account in Linux

Connexion à l’ordinateur distant

Comme la connexion à partir de l’ordinateur distant est réussie et qu’il écoute les connexions, vous pouvez essayer de vous connecter à l’ordinateur distant à partir de l’ordinateur local.

L’ordinateur distant écoute sur le port 43022 de l’ordinateur local. Donc, quelque peu contre-intuitif, pour établir une connexion avec l’ordinateur distant, nous demandons à ssh d’établir une connexion avec l’ordinateur local, sur le port 43022. Cette demande de connexion sera transmise à l’ordinateur distant.

ssh localhost -p 43022 

Nous sommes invités à entrer le mot de passe du compte utilisateur, puis à l’ordinateur local à partir de l’ordinateur distant.

connexion inverse du tunnel SSH à l'ordinateur distant

Notez que l’invite de commande est passée de dave@sulaco à dave@howtogeek. Nous avons atteint notre objectif d’établir une connexion SSH avec un ordinateur distant difficile à atteindre.

Utilisation de SSH avec des clés

Pour faciliter la connexion de l’ordinateur distant à l’ordinateur local, nous pouvons configurer des clés SSH.

Sur l’ordinateur distant, tapez cette commande:

ssh-keygen 

ssh-keygen dans une fenêtre de terminal

Vous serez invité à entrer un mot de passe. Vous pouvez appuyer sur Entrée pour ignorer les questions de phrase secrète, mais cela n’est pas recommandé. Cela signifierait que n’importe qui sur l’ordinateur distant pourrait établir une connexion SSH avec votre ordinateur local sans demander de mot de passe.

Trois ou quatre mots séparés par des symboles constitueront un mot de passe complexe.

Génération de clé ssh dans une fenêtre de terminal

Vos clés SSH seront générées.

Nous devons transférer la clé publique sur l’ordinateur local. Utilisez cette commande:

ssh-copy-id dave@sulaco.local

Vous serez invité à entrer le mot de passe du compte d’utilisateur auquel vous vous connectez, dans ce cas, dave@sulaco.local.

transfert de clés SSH vers l'ordinateur local dans une fenêtre de terminal

La première fois que vous effectuez une demande de connexion de l’ordinateur distant à l’ordinateur local, vous devrez fournir le mot de passe complexe. Vous n’aurez plus besoin de le saisir pour vos futures demandes de connexion, tant que la fenêtre du terminal restera ouverte.

Boîte de dialogue de demande de phrase secrète

CONNEXES: How to Create and Install SSH Keys From the Linux Shell