Question liée: établir une connexion ssh du serveur au client
La réponse de là m'a beaucoup aidé, cette commande fait ce dont j'ai besoin:
ssh -R 2225:localhost:22 loginOfServerWithPublicIP@publicIP
Alors j'ai écrit le script pour se reconnecter tout le temps:
#!/bin/bash
while true; do
echo "try to connect..."
ssh -o ServerAliveInterval=240 -R 2225:localhost:22 user@host
echo "restarting in 5 seconds.."
sleep 5
done
Et ajouté à la /etc/crontab
. Mais j'ai découvert que ça marche si seulement je l'exécute "à la main" depuis shell, mais s'il s'appelle cron, ssh se connecte et se termine immédiatement. (le script ci-dessus se reconnecte tout le temps)
Depuis man ssh
, j'ai trouvé que pour les connexions en arrière-plan, je devrais l'appeler avec une -n
clé, mais cela n'a pas aidé. Ensuite, j’ai juste cherché des scripts similaires et j’ai trouvé que cela fonctionnait si j’appelais tail -f something
, c’est-à-dire une commande "neverending", alors je viens de créer un fichier vide /tmp/dummy_file
et maintenant ma commande ssh ressemble à ceci:
ssh -o ServerAliveInterval=240 -R 2225:localhost:22 -n user@host tail -f /tmp/dummy_file
Ça fonctionne maintenant! Mais cette solution semble un peu moche, et je ne comprends pas vraiment les raisons réelles de ce comportement. Juste par hasard, j'ai essayé d'appeler bash
au lieu de tail -f
( bash
il me semble que la commande "Neverending" aussi), mais ça ne marche pas.
Quelqu'un pourrait-il expliquer ce comportement et quelle est la bonne façon de créer une connexion SSH en arrière-plan pour conserver le tunnel SSH inversé?
while
boucle fonctionnera encore et encore, en commençant une nouvelle ssh
connexion en arrière-plan toutes les 5 secondes, non? Ce n'est pas ce dont j'ai besoin.
&
à la fin de votre commande ssh:ssh -o ServerAliveInterval=240 -R 2225:localhost:22 user@host &