SSH connect back : comment garder la main sur un Raspberry Pi connecté à internet via un dongle 3G

Une question revient souvent dans les commentaires et les messages que je reçois : Comment faire pour se connecter sur un Raspberry Pi à distance si celui ci n’a pas d’ip fixe, comme c’est le cas avec les clés 3G par exemple ?

Je vous propose donc aujourd’hui un tout petit article pour vous montrer un moyen simple et efficace de garder la main sur votre Raspberry Pi connecté en 3G.

Si votre Raspberry Pi est connecté à internet via une clé 3G, vous aurez probablement constaté qu’il est souvent impossible de s’y connecter à distance et que son adresse IP n’est pas fixe. En effet, les infrastructures mises en place par les opérateurs de téléphonie mobile filtrent, la plus part du temps, les flux entrant, et l’adresse IP change à chaque connexion au réseau, et parfois même au cours d’une même session. Si vous avez installé un Raspberry Pi doté d’une clé 3G dans votre maison secondaire, ou que vous utilisez un Raspberry Pi en extérieur comme dans le projet PiTimeLapse, il faut contourner le problème pour pouvoir y accéder à distance.

SSH

Je cite ici la définition présente sur Wikipédia – SSH Secure SHell :

Secure Shell (SSH) est à la fois un programme informatique et un protocole de communication sécurisé. Le protocole de connexion impose un échange de clés de chiffrement en début de connexion. Par la suite, tous les segments TCP sont authentifiés et chiffrés…

Ce qu’il faut retenir, c’est que SSH (nativement présent sur une Raspbian et sur toute distribution Linux qui se respecte), permet de créer un « tunnel » ou un « lien » entre deux machines. Une machine A se connecte sur une machine B, et les machines A et B peuvent échanger des informations.

Si vous utilisez un Pi, vous vous y êtes probablement déjà connecté en utilisant SSH en utilisant la commande suivante :

ssh pi@adresse_ip_de_votre_pi

SSH connect back

Une fonctionnalité intéressante de SSH est d’autoriser les « connections retours ». C’est à dire que si A se connecte sur B, alors B pourra revenir sur A. Et c’est là que se trouve la solution à notre problème 🙂 Si je ne peux pas directement me connecter à mon Pi, je n’ai qu’à dire à mon Pi de se connecter à une machine que je contrôle, pour que je puisse ensuite remonter jusqu’à lui 🙂

connect_back(1)Ceci se fait de manière très simple. Sur le Pi connecté en 3G lancez la commande suivante :

ssh -N -R 10022:127.0.0.1:22 root@ip_serveur
  • -N : ne lance pas de commande sur le serveur distant
  • -R : « redirige un port » sur depuis le serveur disant
  • 10022 : un numéro port (de préférence supérieur à 1024), qu’on utilisera pour se connecter en retour
  • 127.0.0.1 : pour indiquer qu’on redirige le port sur la boucle locale du Pi
  • 22 : numéro du port que l’on souhaite atteindre. Ici, c’est le port utilisé par SSH. Vous pouvez le changer pour celui de VNC, ou de FTP par exemple.

A ce stade, votre Pi est connecté à votre serveur. Depuis votre serveur, vous pouvez vous connecter au Pi en retour en utilisant le port choisi (ici 10022). Si vous souhaitez à nouveau utiliser SSH pour vous connecter en retour sur votre Pi, il vous suffit de lancer la commande suivante depuis votre serveur :

ssh -p 10022 root@127.0.0.1

Ainsi, vous n’avez plus besoin de connaître l’adresse IP de votre Pi connecté en 3G, et vous passez à travers tous les filtres mis en place par les opérateurs de téléphonie mobile 🙂

Si vous voulez vous assurer que le tunnel entre le Pi et votre serveur persiste même après une déconnexion/reconnexion au réseau (ce qui arrive très souvent en 3G), vous pouvez utiliser autossh. Plus d’information sur autossh ici : http://linux.die.net/man/1/autossh

19 réflexions au sujet de « SSH connect back : comment garder la main sur un Raspberry Pi connecté à internet via un dongle 3G »

  1. Paulaborde

    Merci pour cet article, je ne connaissais pas cette option de SSH.
    Je pense que pas mal de monde a ce problème et même derrière une box sans vouloir utiliser un service du type dyndns.

    Personnellement j’avais opté pour un script python qui remonte fréquemment son adresse IP publique par mail, voici le lien :
    https://github.com/paulaborde/SendIP_AutoMail

    Merci pour l’info dans tous les cas.

    Paul

    Répondre
    1. Olivier Auteur de l’article

      Hello,
      Merci pour ce lien 😉
      Le tunnel SSH permet également de passer outre les systèmes de filtrage éventuels.
      Bonne continuation à vous 🙂

      Répondre
  2. Olivier Auteur de l’article

    Bonjour,
    Quelle réponse n’avez vous pas eu par mail ?
    Le mail où vous me demandez de bosser gratuitement pour vous ?
    Essayez donc de réaliser votre projet par vous même à la place d’exiger de moi que je le fasse à votre place. J’ai répondu à vos questions pour vous aider, mais je ne suis pas à votre disposition.
    Bonne continuation

    Répondre
  3. jihem

    bonjour
    Cet article me semble être la solution à mon problème de connexion avec un pi dans une résidence secondaire. Je vais tester cela sans délai. La question que je me pose est de savoir si je peux accéder au serveur web du Raspberry en 3G (pour Domoticz) via le SSH ?
    J’ai bien chercher un peu mais je patauge…….entre l’anglais et l’informatique.
    Merci pour tous ces tutos biens utiles aux ignorants. Même si certains n’apprécient pas!!!

    Répondre
    1. Olivier Auteur de l’article

      Bonjour,
      Oui cest tout à fait possible d’accéder à la console web de Domoticz. Il suffit dans ce cas se forwarder le port de domoticz qui le 8080 de mémoire (à verifier)
      🙂

      Répondre
  4. Damien

    Bonjour
    Je ne connaissais pas cette fonctionnalité de SSH.
    Par contre en 3G, quelle consommation de données pour maintenir la connexion?
    J’aurai besoin de cette fonctionnalité mais je n’ai pas un abonnement illimité…
    Merci de votre réponse

    Répondre
    1. Olivier Auteur de l’article

      Bonjour,

      Une fois le tunnel mis en place, en principe, il ne consomme de la bande passante que si des données transitent. Le tunnel en lui même n’envoie que quelques trames d’info pour maintenir la session, mais cela reste anecdotique 🙂

      Pour info, j’ai fais le tests sur 1 semaines avec une SIM Free à 2€, et j’ai consommé moins de 1Mo de data 😉

      Répondre
  5. Damien

    Encore un question olivier, avant de me lancer dans les tests, peut on lancer plusieurs connexions ssh vers un seul pc. j’aimerai interconnecter plusieurs pi vers un pc « serveur » afin de superviser des appareil raccordé sur les différents PI.
    Encore merci pour ton aide

    Répondre
    1. Olivier Auteur de l’article

      Bonjour Damien,
      Oui c’est tout à fait possible 🙂
      Dans le cas du connect back il faudra attribuer un port différent pour chaque PC qui s’y connecter, par exemple :
      PC 1 : port 10021
      PC 2 : port 10022
      PC 3 : port 10024

      Tu peux aller comme ça jusqu’à 65635 😀

      Bonne continuation 🙂

      Répondre
      1. Damien

        Merci pour tes réponses Olivier mais finalement je pense plutôt établir une connexion VPN entre mes raspberry et mon serveur.
        Encore merci en tout cas
        Damien

        Répondre
        1. Olivier Auteur de l’article

          Yep, le VPN est également une bonne solution, bien qu’un peut plus lourd/complexe à mettre en place.
          Bonne continuation, et n’hésites pas à partager ta configuration 😉

          Répondre
  6. pierre chevalier

    bonjour
    je viens de prendre connaissance de votre tuto, qui me semble très interressant.
    avant de le mettre en application, j’ai des problèmes pour connecter mon dongle 3G Huawei E169 à mon raspberry PI.
    pourriez vous me donner une solution.
    cordialement
    Pierre

    Répondre
  7. Jean-Claude

    Bonjour Olivier
    Votre travail est vraiment impressionnant.
    Je vous remercie sincerement pour vos efforts et pour l’aide que vous apportez aux amateurs purs et durs comme moi.
    Une question :
    Comment faire pour que mon Pi (qui est dans mon atelier) connecté a internet via 3g puisse sauvegarder les images de ma PiCam sur mon serveur (avec dns noip) a la maison (base MySql) ?
    Merci encore

    Répondre
  8. axelis

    BONjour à tous et merci pour toutes ces aides précieuses:
    problème rencontré, après la première commande on me demande un password:
    pi@raspberrypi ~ $ ssh -N -R 10022:127.0.0.1:22 root@10.XXX.200.XXX
    root@10.XXX.200.XXX‘s password:
    mais je ne vois pas duquel il parle notre petit Pi.

    Une idée?
    merci

    Répondre
    1. Olivier Auteur de l’article

      dans ce cas il te demande le mot de passe du compte root de la machine 10.xxx.200.xxx

      Répondre

Laisser un commentaire