Créer un tunnel SSH inverse pour pouvoir supporter à distance un ami utilisant Linux

Avez-vous déjà voulu accéder a votre ordinateur Unix/Linux/MacOS d’un ami, chez ou ailleurs, et que vous avez besoin de l’aider a distance?   En tant qu’utilisateur de Linux, si vous aider quelqu’un d’autre qui n’Est pas habitué, il peut vouloir votre aide. Cette procédure peut vous aider a l’aider, a distance.

Ça vient de m’arriver. Je vais vous montrer comment j’ai fait.

Ce que j’ai utilisé:

  1. Une machine avec OpenSSH que chaque personne à accès (une instance Amazon EC2?)
  2. Créer un nouvel utilisateur temporaire pour la personne a aider
  3. Ordinateur a réparer roulant Linux/Unix/MacOS/Cygwin (qui a OpenSSH serveur et client)

Ce que j’avait fait avec, en plus de cette procédure, c’est un script RC qui créait une connection permanente, avec une connection SSH qui ne requiert pas de mot de passe.

L’idée étaait que peu importe le lieu ou mon ami se trouve, dès qu’il/elle a un lien à Internet, j’ai accès a son ordinateur portable.

Ma procédure décrit comment créer un lien entre ces deux machines.

L’historique

Il y a quelques années j’ai fait le cadeau a ma mère d’un vieil ordinateur portable. Étant donné qu’il était vieux et qu’elle n’a jamais vraiment utilisé d’ordinateur dans sa vie, j’ai pensé lui configurer un Ubuntu qui avait tout ce qui est nécessaire.

Elle l’a utilisée pendant environ 3 ans. Je crois que ma maman sait maintenant qu’un navigateur web n’est pas nécessairement Internet Explorer. Qu’un document n’est pas obligatoirement un fichier “Word”. Aujourd’hui elle roule sous Windows. Parce que quelqu’un d’autre lui a fait le cadeau et qu’il n’est pas porté a utiliser Linux comme moi.

Toujours est-il que pour l’aider j’utilisait ce processus pour entretenir son ordinateur sans qu’elle ait rien a faire.

0. La machine accessible pour les deux

Surnommons cette machine “vm.somehost.com“.

Il faut que vous et votre ami ayez accès a cette machine sur le port 22. Si c’est votre machine, vous pouvez forcément créer un nouveau compte pour votre ami qu’il utilisera pour initier le tunnel entre sa machine et cet machine.

1. Sur le poste de votre ami

Dans mon exemple, son compte est “user“, sa machine s’appelle “friend-machine“.

Prérequis

  1. OpenSSH qui est installé et qui roule.
    En Mac OS, c’est dans Préférences, Partage, il y a une option Accès a distance <rant rel=”windows”>… ah ces changements de noms pour la même chose</rant>.
  2. Un compte utilisateur pour vos propres besoins
    … Ou le même que votre ami, s’il vous donne un mot de passe <truc>Pssiiit. passwd sert a changer un mot de passe en terminal!</truc>

Donc, assurez-vous que votre ami…

  1. vous fournit un compte pour vous connecter sur sa machine (“friend-machine“)
  2. Assurer que OpenSSH  roule

Je vous écrit tout ça de mémoire. Une recherche sur comment activer OpenSSH et créer un utilisateur qui y aura accès sur cette  machine MacOS/Linux vous aidera plus que cet article.

2. Créer le tunnel sur la machine de votre ami

Si tout est fonctionnel, vous avez déjà passé le pire, lui expliquer c’est quoi un utilisateur, si l’accès a distance ou SSH c’est quoi, et pourquoi vous lui demandez d’y accéder.

Expliquez-lui de ne pas utiliesr de mot de passe simple.  Qu’il ne vous donne pas non plus son mot de passe… s’il l’utilise ailleeurs (ou partout, c’est bien d’enseigner ça a ses amis).

Donc… lui faire taper la commande dans un terminal:

Le BUT de cet article, LA commande, UNE LINGE!

user@friend-machine$ ssh -nNT -R 1103:localhost:22 friendusername@vm.somehost.com

Ce qui se passera c’est que l’ami (qui a une machine qui s’appelle “friend-machine” dans cet exemple) initie un tunnel SSH silencieux vers “vm.somehost.com” (le serveur accessible par vous et votre ami) qui s’y connecte avec l’usager temporaire (“friendusername”).

Les options utilisés:

  • n Sert pour éviter d’afficher des choses sur son terminal n’affiche rien (envoie vers /dev/null)
  • N Sert pour préciser de ne pas utiliser la ligne de commande,   une fois connecté, il ne dira rien.
  • T Sert à ne pas allouer de pseudo terminal (pseudo-tty)
  • R Sert a préciser un Tunnel inversé (Reverse) qui servira a exposer dans (“vm.somehost.com“) au tunnel initié par (“friend-machine“) au port 22 à partir du port 1103 de (“vm.somehost.com“).

3. Vous connecter de VOTRE poste, à la machine commune,  à finalement le poste de votre ami.

Enfin. Il ne reste qu’a vous, vous connecter a cette machine commune, pour accéder au tunnel que vous lui avez fait créer, et utiliser SA machine.

Il ne suffit que de se  connecter  sur vm.somehost.com sous votre compte habituel, initialiser un screen puis vous re-connecter sur le port spécial qui vous donnera accès au poste “friend-machine“.

Facile!!

En ordre:

renoirb@mon-laptop:~$  ssh vm.somehost.com
renoirb@vm:~$ screen
renoirb@vm: ~$ ssh user@localhost -p 1103
user@friend-machine:~$ uname -a
Darwin friend-machine 10.8.0 Darwin Kernel Version 10.8.0: Tue Jun  7 16:33:36 PDT 2011; root:xnu-1504.15.3~1/RELEASE_I386 i386

En gros, je me connecte a vm.somehost.com, j’y initie une session screen, puis je me re-connecte en SSH sur le port local 1103 ouvert par mon ami user@friend-machine (vous suivez toujours?) et hop! Je suis sur la machine distante.

Screen

Avec Screen, je peut ainsi me détacher du terminal et m’y reconnecter plus tard sans arrêter les choses en cours.

Pour se déconnecter et se reconnecter je fais ainsi

  1. Connecter/reconnecter:   screen -dd -R
  2. Détacher (combinaison de touches):  ctrl+a d

Finalement

Nous aurons entré quelques lignes de terminal et hop, nous avons accès a la machine de notre ami.  C’est sûr que vous pouvez jouer avec les tunnels et accéder aux autres services, mais je ne vous expliquerai pas comment spécifiquement utiliser chaque cas.

Je vous laisse imaginer les cas de figure possible:

  • Faire une mise a jour de paquets
  • Réinstaller des programmes
  • Accéder a un service qu’il a localement, comme un serveur web, etc.

… J’aime linux!

Sources

  1. TechRepublic article Setting up a reverse SSH tunnel
  2. HowTo Forge: Reverse SSH Tunneling
  3. LinuxJournal: Power sessions with Screen