Tuto - mettre en place un tunnel SSH entre 2 jeedom

Bonjour à tous,

Un petit retour sur la mise en place d’une tunnel SSH entre 2 jeedom dans 2 réseaux différents
(merci à @bad et @kenin pour leur aide !)

Objectif : Mettre en place un tunnel entre 2 jeedom de manière à pouvoir acceder à des services d’un jeedom à partir de l’autre jeedom sans avoir besoin de modifier les regles de nattage ou ouverture de FW sur les box internet
Ce tunnel sera monté au demarrage du serveur et relancé en cas de perte de conenctivité.

image

Mon cas d’usage, accéder à partir de mon Jeedom 1 au serveur mosquitto sur mon jeedom 2 et ainsi paramétrer les équipements du Jeedom 2 dans le Jeedom 1 via JMQTT (et sans Jeelink).

Pre-requis : 1 seul, que le Jeedom 2 soit accessible en ssh à partir du reseau du jeedom 1

Aller, on y va, le principe est assez simple, on crée un tunnel entre le Jeedom 1, port 1 et le Jeedom 2, port 2,

1 - on autorise les connexion SSH par clé du compte Jeedom sur le Jeedom 1 vers le compte Jeedom du Jeedom 2

Connecté en SSH, compte jeedom sur le Jeedom 1

ssh-keygen

(ne pas mettre de passphrase)
puis transfert de la clé vers jeedom 2

ssh-copy-id jeedom@adressedns.jeedom2

On teste sur le jeedom 1, compte jeedom

ssh jeedom@adressedns.jeedom2

Aucun mot de passe ne doit etre demandé

2 - on créer le service qui permettra d’ouvrir automatiquement la connexion au démarrage ou redémarrer le service sur la connexion tombe

Fichier de paramétrage

sudo nano  /etc/default/secure-tunnel.config

et coller le contenu suivant (en l’ayant adpaté)

Host jeedom2
   HostName adressedns.jeedom2
   User jeedom
   IdentityFile /home/jeedom/.ssh/id_rsa
   LocalForward 127.0.0.1:1884 127.0.0.1:1883
   ServerAliveInterval 10
   ServerAliveCountMax 3
   ExitOnForwardFailure yes

1884 : sera le port source, sur le jeedom 1 - d’ou on part
1883 : sera le port cible sur le jeedom 2 -sur quoi on pointe
(note : l’exemple port sur un service 1883 sur le jeedom 2, mais ca peut-etre n’importe quelle service sur le reseau 2 en renseignant une autre adresse IP et un autre port que 127.0.0.1:1883)

Dans ce fichier, on peut rajouter autant de host que l’on souhaite. il suffira de lancer ensuite des services avec la commande ecure-tunnel@.service

Service :

sudo nano /etc/systemd/system/secure-tunnel@.service

(IL N’Y A RIEN ENTRE @ et .service, ce n’est pas une erreur)

et inserer le contenu suivant

[Unit]
Description=Setup a secure tunnel to %I
After=network.target

[Service]
User=jeedom
Group=jeedom
ExecStart=/usr/bin/ssh -F /etc/default/secure-tunnel.config -NT %i

# Restart every >2 seconds to avoid StartLimitInterval failure
RestartSec=5
Restart=always

[Install]
WantedBy=multi-user.target

Puis activation et lancement du service

systemctl daemon-reload
systemctl start secure-tunnel@jeedom2.service     #pour démarrer le tunnel
systemctl enable secure-tunnel@jeedom2.service     #pour démarrer le tunnel au demarrage
systemctl status secure-tunnel@jeedom2.service     #pour verifier qu'il est bien lancé

Jeedom2 correspond au champ host du fichier de paramétrage

Note : le nom du fichier de demarrage est bien /etc/systemd/system/secure-tunnel@.service, sans le nom d’host. ainsi, si vous inserez un autre service dans le fichier de paramétrage, vous pourrez utiliser le meme script.

3 - pour vérifier que tout ca fonctionne,

sudo systemctl is-active secure-tunnel@jeedom2.service

Doit renvoyé active si le service est bien lancé
et

sudo netstat -lpn | grep 1884 | wc -l

doit renvoyé 1 si le tunnel est bien monté

J’ai integré ces commandes dons mon Jeedom1 via ssh commander pour monitorer le tunnel

image

Voilà, le service sur le port 1883 (mosquitto chez moi) sur le jeedom 2 est accessible sur le jeedom 1 via l’adresse 127.0.0.1:1884

Bon courage à ceux qui se lancent
Norbert

6 « J'aime »

:wave::wave::wave:

Bon au départ, je m’interrogeais sur l’utilité de ton tuto :thinking::thinking: mais en relisant le sujet au quel il fait référence j’en vois tout l’intérêt…

Merci pour ce tuto @ngrataloup

Autre usage, dès lors que tu as un accès SSH sur ton Jeedom …
tu paramètres putty comme cela :
image

Et tu as un accès à distance à l’interface Web de ton system local (un shelly dans mon cas, avec pour adresse locale 192.168.8.220), juste en renseignant 127.0.0.1:8885 dans Firefox :

Et tout ca, sans la moindre modif de paramétrage de ta box (NAT ou FW) … Je ne comprends même pas comment j’ai pu vivre sans !

Ça permettrait même d’accéder à une application que tu ne voudrais même pas ouvrir sur internet (il faudra que je teste et te confirme ça paperlessar exemple)