Pour ceux qui ne veulent pas (ou) ne peuvent pas utiliser AutoSSH...
J'ai un NAS auquel je veux accéder depuis internet, je ne peux pas utiliser le redirection de ports car mon FAI utilise le CGNAT (mon adresse IP publique n'est pas vraiment mon adresse IP publique, je suis derrière un autre routeur sur lequel je n'ai aucun contrôle). Par conséquent, pour accéder à mon NAS, j'ai un VPS (que je loue chez OVH pour un coût mensuel très faible) et qui a une adresse IP publique fixe. Donc pour accéder à mon NAS depuis internet, je dois simplement créer un tunnel SSH entre mon NAS et mon VPS, qui reste fiablement ouvert en permanence (pour un accès 24 heures sur 24). Cependant, j'ai souffert du tunnel SSH qui était "fermé" en raison de l'inactivité (malgré le processus ssh restant actif). Cela peut facilement être surmonté en demandant au client (dans mon cas, le VPS) de "pinguer" le serveur (dans mon cas, le NAS) en utilisant l'option keep alive.
Pour créer un Tunnel SSH, j'émet la commande suivante (à partir du NAS) :
ssh -NT -o ServerAliveInterval=60 -o ServerAliveCountMax=10 -o ExitOnForwardFailure=yes -i /var/services/homes/foouser/.ssh/id_rsa -R 8080:localhost:80 -R 4443:localhost:443 foouser@
Pour expliquer cette commande :
-N
- Ne pas exécuter de commande à distance ; utile pour simplement faire de la redirection de ports.
-T
- Désactiver l'allocation de pseudo-tty.
-R 8080:localhost:80
- Spécifie que le port donné sur l'hôte distant (serveur) doit être redirigé vers l'hôte et le port donnés sur le côté local. Dans ce cas, cela signifie rediriger le port 80 du serveur distant vers le port 8080 du client.
-i /chemin/vers/clé
- Spécifie le chemin de la clé ssh utilisée pour établir la session ssh, sans cela vous devrez entrer le nom d'utilisateur (si non fourni) et le mot de passe pour établir la session ssh.
ServerAliveInterval
- le nombre de secondes que le client attendra avant d'envoyer un message "server alive" au serveur pour maintenir la connexion active.
ServerAliveCountMax
- le nombre de messages "server alive" qui peuvent être envoyés sans réponse du serveur. Si ce seuil est atteint, ssh se déconnectera du serveur, mettant fin à la session.
ExitOnForwardFailure
- si défini sur "yes", la connexion sera interrompue si ssh ne peut pas configurer toutes les redirections de port dynamiques, tunnel, locales et distantes demandées (par exemple, si l'une ou l'autre des extrémités ne peut pas se lier et écouter sur un port spécifié).
foouser@
- Spécifie le compte utilisateur foouser
utilisé pour établir la session ssh de redirection de port distant avec le serveur .
Il vaut également la peine d'ajouter quelques options de configuration ssh au serveur (dans mon cas, sur mon VPS) ; en ajoutant le fichier suivant s'il n'existe pas déjà :
[foouser@vps ~]$ cat /home/foouser/.ssh/config
Host *
TCPKeepAlive yes
ClientAliveInterval 30
ClientAliveCountMax 9999
Note : vous pouvez remplacer le *
(qui signifie appliquer cette configuration à "tous les hôtes") par un hôte spécifique - Dans mon cas, mon NAS (c'est-à-dire l'hôte qui se connecte à mon VPS) est derrière mon routeur ; l'adresse IP publique de mon routeur change fréquemment car elle est attribuée en DHCP (par mon FAI) donc je suis resté avec "tous les hôtes".
Processus SystemD (NAS Synology)
J'ai également cette commande (celle qui démarre le tunnel SSH en tant que processus systemd, si cela intéresse quelqu'un, voici le script :
foouser@nas:~$ cat /etc/systemd/system/sshtunnel-web.service
[Unit]
Description=Tunnel SSH pour WebStation
After=network.target
[Service]
Restart=always
RestartSec=1
User=foouser
ExecStart=/bin/ssh \
-NT \
-o ServerAliveInterval=60 \
-o ServerAliveCountMax=10 \
-o ExitOnForwardFailure=yes \
-i /var/services/homes/foouser/.ssh/id_rsa \
-R 8080:localhost:80 \
-R 4443:localhost:443 \
foouser@
[Install]
WantedBy=multi-user.target
Pour démarrer et activer le service Tunnel SSH :
foouser@nas:~$ sudo systemctl daemon-reload
foouser@nas:~$ sudo systemctl start sshtunnel-web.service
foouser@nas:~$ sudo systemctl enable sshtunnel-web.service
Cela a bien fonctionné pour moi pendant plusieurs mois. Cela inclut une fiabilité sur plusieurs redémarrages de mon routeur domestique, du serveur VPS et du NAS.
0 votes
Est-ce que votre tunnel est mort à cause de l'inactivité? J'ai eu ce problème lorsque je transférais des ports depuis mon téléphone, alors j'ai finalement commencé à générer des commandes factices sur la connexion pour le maintenir "en vie" en utilisant la commande
watch
comme ceci :watch -n1 60 echo "wiiiii"
. Le tunnel ne mourra pas à moins que le réseau ne soit coupé ou que vous ne l'utilisiez pas.2 votes
Lié : unix.stackexchange.com/q/200239