- Dave McKay
@TheGurkha
- July 18, 2019, 9:00am EDT
Vous avez besoin de SSH à 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 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 en place, ou peut-être que l’administrateur local a mis en place des règles complexes de traduction d’adresses réseau. Comment atteindre un tel ordinateur si vous devez vous y connecter ?
Etablissons quelques étiquettes. Votre ordinateur est l’ordinateur local car il est près de vous. L’ordinateur auquel vous allez vous connecter est l’ordinateur distant car il se trouve à un endroit différent du vôtre.
Pour différencier les ordinateurs locaux et distants utilisés dans cet article, l’ordinateur distant s’appelle « howtogeek » et fonctionne sous 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 lanceriez une connexion SSH depuis l’ordinateur local et vous connecteriez à 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 spécifique du réseau n’a pas vraiment d’importance – c’est utile chaque fois que vous ne pouvez pas vous connecter directement en SSH à un ordinateur distant.
Mais si la configuration du réseau de votre côté est simple, l’ordinateur distant peut se connecter à vous. Cependant, cela 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 avez une connexion établie entre les deux ordinateurs.
La réponse réside dans le tunneling SSH inverse.
Qu’est-ce que le tunneling SSH inverse ?
Le tunneling SSH inverse vous permet d’utiliser cette connexion établie pour configurer une nouvelle connexion de votre ordinateur local vers l’ordinateur distant.
Parce que la connexion originale venait de l’ordinateur distant vers vous, l’utiliser pour aller dans l’autre sens est l’utiliser « en sens inverse ». Et comme SSH est sécurisé, vous mettez une connexion sécurisée à l’intérieur d’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.
Et c’est ainsi que nous arrivons au nom de « tunneling SSH inversé ».
Comment cela fonctionne-t-il ?
Le tunneling 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 sur ce port, il retransmet cette demande de connexion à lui-même, en descendant la connexion établie. Cela fournit une nouvelle connexion de l’ordinateur local à l’ordinateur distant.
C’est plus facile à configurer qu’à décrire.
Utiliser SSH Reverse Tunneling
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é de connexions SSH auparavant.
sudo systemctl start sshd
Pour que le démon SSH démarre chaque fois que vous redémarrez votre ordinateur, utilisez cette commande :
sudo systemctl enable sshd
Sur l’ordinateur distant, on utilise la commande suivante .
- L’option
-R
(reverse) indique àssh
que de nouvelles sessions SSH doivent être créées sur l’ordinateur distant. - L’option « 43022:localhost:22 » indique à
ssh
que les demandes de connexion au port 43022 sur l’ordinateur local doivent être transmises au port 22 sur l’ordinateur distant. Le port 43022 a été choisi parce qu’il est répertorié comme étant non alloué. Ce n’est pas un numéro spécial. - [email protected] est le compte utilisateur auquel l’ordinateur distant va se connecter sur l’ordinateur local.
ssh -R 43022:localhost:22 [email protected]
Vous pouvez recevoir un avertissement comme quoi 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 – s’il y a quelque chose – dépend du fait que des connexions ont déjà été établies de l’ordinateur distant à l’ordinateur local.
Vous serez invité à saisir le mot de passe du compte que vous utilisez pour vous connecter à l’ordinateur local.
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
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 de l’utilisateur) depuis l’adresse IP 192.168.4.25.
RELATED : Comment déterminer le compte utilisateur actuel sous Linux
Connexion à l’ordinateur distant
Parce que la connexion depuis l’ordinateur distant est réussie, et qu’il écoute les connexions, nous pouvons essayer de nous connecter à l’ordinateur distant depuis l’ordinateur local.
L’ordinateur distant écoute sur le port 43022 sur l’ordinateur local. Donc – un peu contre-intuitivement – pour établir une connexion avec l’ordinateur distant, on demande à ssh
d’établir une connexion l’ordinateur local, sur le port 43022. Cette demande de connexion sera transmise à l’ordinateur distant.
ssh localhost -p 43022
On nous demande le mot de passe du compte utilisateur, puis on se connecte à l’ordinateur distant depuis l’ordinateur local. Notre ordinateur Manjaro dit joyeusement « Bienvenue sur Ubuntu 18.04.2 LTS ».
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.
Utiliser SSH avec des clés
Pour rendre plus pratique 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
On vous demandera une phrase de passe. Vous pouvez appuyer sur Entrée pour ignorer les questions relatives à la phrase de passe, mais cela n’est pas recommandé. Cela signifierait que n’importe qui sur l’ordinateur distant pourrait établir une connexion SSH à votre ordinateur local sans qu’on lui demande un mot de passe.
Trois ou quatre mots séparés par des symboles feront une phrase de passe robuste.
Vos clés SSH seront générées.
Nous devons transférer la clé publique à l’ordinateur local. Utilisez cette commande :
ssh-copy-id [email protected]
On vous demandera le mot de passe du compte utilisateur auquel vous vous connectez, dans ce cas, [email protected].
La première fois que vous ferez une demande de connexion de l’ordinateur distant à l’ordinateur local, vous devrez fournir la phrase de passe. Vous n’aurez pas à la saisir à nouveau pour les futures demandes de connexion, tant que cette fenêtre de terminal restera ouverte.
RELATED : Comment créer et installer des clés SSH à partir du shell Linux
Pas tous les tunnels sont effrayants
Certains tunnels peuvent être sombres et sinueux, mais le tunnelage SSH inversé n’est pas trop difficile à naviguer si vous pouvez garder la relation entre l’ordinateur distant et l’ordinateur local droite dans votre tête. Alors inversez-la.
Dave McKay a d’abord utilisé des ordinateurs lorsque le ruban de papier perforé était en vogue, et il n’a cessé de programmer depuis. Après plus de 30 ans dans l’industrie informatique, il est maintenant journaliste technologique à plein temps. Au cours de sa carrière, il a travaillé comme programmeur indépendant, responsable d’une équipe internationale de développement de logiciels, chef de projet de services informatiques et, plus récemment, comme responsable de la protection des données. Dave est un évangéliste Linux et un défenseur de l’open source.Lire la bio complète »