Qu’est-ce que le tunnel SSH inversé? (et comment l’utiliser)

Besoin de SSH sur un ordinateur Linux inaccessible? Demandez-lui de vous appeler, puis creusez cette connexion pour obtenir votre propre session SSH à distance. Nous vous montrons comment.

Quand vous voudrez utiliser le tunnel SSH inversé

Parfois, les ordinateurs distants peuvent être difficiles à atteindre. Le site sur lequel ils se trouvent peut avoir des règles de pare-feu strictes en place, ou peut-être que l’administrateur local a mis en place un complexe Traduction d’adresses réseau règles. Comment accéder à un tel ordinateur si vous devez vous y connecter?

Établissons quelques é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 vous.

Pour faire la différence entre les ordinateurs locaux et distants utilisés dans cet article, l’ordinateur distant est appelé «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 allumeriez un Connexion SSH à partir de l’ordinateur local et connectez-vous à l’ordinateur distant. Ce n’est pas une option dans le scénario de mise en réseau que nous décrivons. Le problème de réseau spécifique n’a pas vraiment d’importance. Ceci est utile chaque fois que vous ne pouvez pas utiliser SSH directement sur un ordinateur distant.

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

  Comment activer le mode basse consommation sur un Mac

La réponse réside dans le tunnel SSH inversé.

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

Le tunnel SSH inversé vous permet d’utiliser cette connexion établie pour configurer une nouvelle connexion de votre ordinateur local vers l’ordinateur distant.

Étant donné que la connexion d’origine vous est venue de l’ordinateur distant, l’utiliser pour aller dans l’autre sens revient à l’utiliser «en sens inverse». Et comme SSH est sécurisé, vous placez une connexion sécurisée dans une connexion sécurisée existante. Cela signifie que votre connexion à l’ordinateur distant agit comme un tunnel privé à l’intérieur de la connexion d’origine.

Nous arrivons donc au nom de «tunnel SSH inversé».

Comment ça marche?

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

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

C’est plus facile à configurer qu’à décrire.

Utilisation du tunneling inverse SSH

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

sudo systemctl start sshd

sudo systemctl démarre sshd dans une fenêtre de terminal

Pour que le démon SSH démarre chaque fois que vous redémarrez votre ordinateur, utilisez cette commande:

sudo systemctl enable sshd

sudo systemctl activer sshd dans une fenêtre de terminal

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

  Comment vérifier si Xbox Live est en panne ou non

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

ssh -R 43022:localhost:22 [email protected]

ssh -R 43022: localhost: 22 dave@sulaco.local dans une fenêtre de terminal

Vous pouvez recevoir un avertissement indiquant que vous ne vous êtes jamais connecté à l’ordinateur local auparavant. Ou vous pouvez 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 ont 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 a été établie, l’invite de commande passe de dave @ howtogeek à dave @ sulaco.

Nous sommes maintenant connectés à l’ordinateur local depuis l’ordinateur distant. Cela signifie que nous pouvons lui envoyer 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 utilisateur appelé dave s’est connectée à l’ordinateur local et que l’ordinateur distant s’est connecté (en utilisant les mêmes informations d’identification utilisateur) à partir de l’adresse IP 192.168.4.25.

Connexion à l’ordinateur distant

Étant donné que la connexion à partir de l’ordinateur distant est réussie et qu’il écoute les connexions, nous pouvons essayer de nous connecter à l’ordinateur distant à partir de l’ordinateur local.

L’ordinateur distant écoute sur le port 43022 de l’ordinateur local. Donc, de manière quelque peu contre-intuitive, pour établir une connexion à l’ordinateur distant, nous demandons à ssh de se connecter à l’ordinateur local, sur le port 43022. Cette demande de connexion sera transmise à l’ordinateur distant.

ssh localhost -p 43022

ssh localhost -p 43022 dans une fenêtre de terminal

Nous sommes invités à entrer le mot de passe du compte utilisateur, puis connectés à l’ordinateur distant à partir de l’ordinateur local. Notre ordinateur Manjaro dit joyeusement: «Bienvenue dans Ubuntu 18.04.2 LTS».

  Comment désactiver les images dans Firefox pour iOS

connexion inversée 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 notre 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 une phrase secrète. Vous pouvez appuyer sur Entrée pour ignorer les questions de phrase secrète, mais ce n’est pas recommandé. Cela signifierait que n’importe qui sur l’ordinateur distant pourrait établir une connexion SSH à votre ordinateur local sans être contesté pour un mot de passe.

Trois ou quatre mots séparés par des symboles constitueront une phrase de passe robuste.

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 [email protected]

ssh-copy-id dave@sulaco.local dans une fenêtre de terminal

Vous serez invité à entrer le mot de passe du compte utilisateur auquel vous vous connectez, dans ce cas, [email protected].

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 entre l’ordinateur distant et l’ordinateur local, vous devrez fournir la phrase secrète. Vous n’aurez pas à le saisir à nouveau pour de futures demandes de connexion, tant que cette fenêtre de terminal reste ouverte.

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

Tous les tunnels ne font pas peur

Certains tunnels peuvent être sombres et sinueux, mais le tunnel SSH inversé n’est pas trop difficile à naviguer si vous pouvez garder la relation entre l’ordinateur distant et l’ordinateur local directement dans votre tête. Puis inversez-le.