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é?
la source
&
à la fin de votre commande ssh:ssh -o ServerAliveInterval=240 -R 2225:localhost:22 user@host &
while
boucle fonctionnera encore et encore, en commençant une nouvellessh
connexion en arrière-plan toutes les 5 secondes, non? Ce n'est pas ce dont j'ai besoin.Réponses:
On dirait que vous voulez l'
-N
option de ssh.la source
Je vous suggère fortement de considérer
autossh
. Il dispose de certaines méthodes heuristiques lui permettant de déterminer si la perte de connexion est la raison sous-jacente et d’abaisser la fréquence des tentatives de reconnexion. De plus, il surveille la connexion en utilisant des tunnels supplémentaires, ce qui le rend très utile pour des scénarios tels que celui sur lequel vous vous interrogez.Si vous êtes sur Ubuntu, par exemple, vous pouvez effectuer une recherche Web pour
autossh upstart
trouver des exemples utiles sur la façon de configurer Ubuntu afin que le tunnel soit maintenu de manière persistante.J'utilise ceci pour garder une connexion tunnel ouverte sur mon serveur à tout moment pour certains services.
la source
autossh
, j'ai lu cet article: goo.gl/jVuuSR , mais cela ne fonctionnait que si j'ai une connexion Internet tout de suite au démarrage du système; mais si la connexion est établie plus tard, cela ne fonctionne pas. Je ne sais pas, peut - être je l' ai fait quelque chose de mal, mais même dans cet auteur de l' article asleep 10
dans son/etc/rc.local
, afin d'être sûr connexion internet est déjà prêt quand autossh est appelé.upstart
et d'autres remplacements d'init, vous pouvez lier le démarrage du tunnel à un ou plusieurs périphériques réseau en activité. Le meilleur des solutions (IMO) sur le Web est celui-ci: erik.torgesta.com/tag/ssh-upstart ... et non,sleep 10
cela ne changera rien dans certains cas.ssh-upstart
, je vais y jeter un coup d'oeil!Je vais deuxième @ suggestion de 0xC0000022L et de l' utilisation
autossh
aussi bien. Je l'utilise pour maintenir une connexion SSH à partir de mon ordinateur portable lorsque je le prends d'un endroit à l'autre et cela fonctionne. J'utilise cette connexion pour faire tunneler les ports arrière 25 et 2143 pour accéder à mes serveurs personnels SMTP et IMAP.Voici le script que j'utilise:
Je maintiens ensuite une
Host
entrée dans mon$HOME/.ssh/config
fichier pour hôteimap-o
.Le
autossh_mail.sh
script est exécuté dans le cadre de mon bureau lorsque je me connecte. Vous pouvez y accéder viagnome-session-properties
.la source