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é.
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
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