login ssh arrière-plan permanent pour créer un tunnel inverse: quelle est la bonne façon?

Question connexe: lancer la connection ssh du server au client

Réponse de là m'a beaucoup aidé, cette command fait ce dont j'ai besoin:

ssh -R 2225:localhost:22 loginOfServerWithPublicIP@publicIP 

J'ai donc écrit le script pour me reconnecter tout le time:

  #!/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 l'a ajouté au /etc/crontab . Mais j'ai découvert que cela fonctionne si seulement je l'exécute "à la main" à partir de shell, mais si elle est appelée par cron, ssh se connecte et se termine immédiatement. (donc, le script ci-dessus se reconnecte tout le time)

De l' man ssh , j'ai trouvé que pour les connections d'arrière-plan, je devrais l'appeler avec -n key, mais cela n'a pas aidé. Ensuite, j'ai juste cherché des scripts similaires et j'ai trouvé que cela fonctionne si j'appelle tail -f something , c'est à dire une command "neverending", donc je viens de créer le file vide /tmp/dummy_file et maintenant ma command 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 laide, plus 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 me semble "neverending" command aussi), mais ça ne marche pas.

Alors, est-ce que quelqu'un pourrait expliquer ce comportement, et quelle est la bonne façon de créer une connection ssh en arrière-plan pour garder le tunnel ssh inversé?

On dirait que vous voulez l'option -N à ssh.

  -N Do not execute a remote command. This is useful for just forwarding ports (protocol version 2 only). 

Je vous suggère fortement de considérer autossh . Il a certaines heuristiques qui lui permettront de déterminer si la perte de connection est la raison sous-jacente et réduira la fréquence des tentatives de reconnection. En outre, il surveille la connection en utilisant des tunnels supplémentaires, ce qui le rend très utile pour les scénarios comme celui que vous posez.

Si vous êtes sur Ubuntu, par exemple, vous pouvez faire une search sur le autossh upstart pour find des exemples utiles sur la façon de configurer Ubuntu afin que le tunnel soit maintenu de façon persistante.

J'utilise ceci pour garder une connection tunnel ouverte à mon server à tout moment pour certains services.

Je vais seconder la suggestion de @ 0xC0000022L et utiliser autossh aussi. Je l'utilise pour maintenir une connection SSH à partir de mon ordinateur portable que je le prends d'un endroit à l'autre et cela fonctionne. J'utilise cette connection pour tuner les ports 25 et 2143 pour accéder à mes servers SMTP et IMAP personnels.

Voici le script que j'utilise:

 $ more /home/saml/bin/autossh_mail.sh #!/bin/bash autossh -M 0 -f -N -L 2025:localhost:25 -L 2143:localhost:143 sam@imap-o 

Je conserve alors une input Host dans mon file $HOME/.ssh/config pour l'hôte imap-o .

 $ more $HOME/.ssh/config ServerAliveInterval 15 ForwardX11 yes ForwardAgent yes ForwardX11Trusted yes GatewayPorts yes Host * ControlMaster auto ControlPath ~/.ssh/master-%r@%h:%p IdentityFile ~/.ssh/id_dsa Host imap-o User sam ProxyCommand ssh [email protected] nc `echo %h|sed 's/-o//'` %p 

Le script autossh_mail.sh est exécuté sur mon bureau lorsque je me connecte. Vous pouvez y accéder via gnome-session-properties .

ss # 1

ss # 2