357 votes

Comment maintenir de manière fiable un tunnel SSH ouvert ?

J'utilise un tunnel SSH depuis le travail pour contourner divers pare-feu idiots (cela ne pose pas de problème avec mon patron :)). Le problème est que, après un certain temps, la connexion ssh se fige généralement et le tunnel est interrompu.

Si je pouvais au moins surveiller le tunnel automatiquement, je pourrais le redémarrer lorsqu'il se fige, mais je n'ai même pas trouvé de moyen de le faire.

Des points bonus pour celui qui peut me dire comment empêcher ma connexion ssh de se figer, bien sûr !

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

1voto

Paul Williams Points 123

J'avais besoin de maintenir un tunnel SSH à long terme. Ma solution était de lancer un petit programme en C depuis un serveur Linux qui relance ssh en utilisant l'authentification par clé.

Je ne suis pas sûr du problème de blocage, mais j'ai déjà vu des tunnels se rompre à cause de délais d'attente.

Je serais ravi de partager le code du programme de relance, mais je ne parviens pas à le trouver pour le moment.

1voto

Spadar Shut Points 151

Un peu un bidouillage, mais j'aime utiliser screen pour ça. J'ai actuellement une redirection distante qui tourne depuis des semaines.

Par exemple, en lançant localement :

screen
ssh -R ......

Une fois la redirection distante appliquée, et que vous avez un shell sur l'ordinateur distant :

screen
Ctrl + a + d

Vous avez maintenant une redirection distante ininterrompue. Le truc est de lancer screen des deux côtés

1voto

Andy C Points 111

Récemment, j'ai rencontré ce problème moi-même, car ces solutions nécessitent de réinsérer le mot de passe à chaque fois si vous utilisez une connexion par mot de passe. J'ai utilisé sshpass dans une boucle avec un prompt texte pour éviter d'avoir le mot de passe dans le fichier batch.

J'ai pensé partager ma solution sur ce fil au cas où quelqu'un d'autre rencontrerait le même problème :

#!/bin/bash
read -s -p "Mot de passe : " pass
while true
do
    sshpass -p "$pass" ssh utilisateur@adresse -p port
    sleep 1
done

0 votes

Cette réponse a près de 10 ans à ce stade, mais j'espère que personne n'utilise le script fourni car il place le mot de passe dans la ligne de commande où tout autre processus peut le voir. Si vous ne me croyez pas, ouvrez un shell et tapez ps aux et regardez tous les arguments de ligne de commande de tous les processus s'exécutant sur votre ordinateur. Au lieu de mots de passe, utilisez des clés publiques. Alors, vous ne serez pas invité pour un mot de passe (sauf si vous avez protégé le mot de passe de la clé, bien sûr).

1voto

ceremcem Points 495

Comme autossh ne répond pas à nos besoins (il génère une erreur s'il ne parvient pas à se connecter au serveur dès la première tentative), nous avons écrit une application bash pure : https://github.com/aktos-io/link-with-server

Elle crée un tunnel inversé pour le port sshd du NODE (22) sur le serveur par défaut. Si vous avez besoin d'effectuer d'autres actions (comme le transfert de ports supplémentaires, l'envoi de mails lors de la connexion, etc...), vous pouvez placer vos scripts dans les dossiers on-connect et on-disconnect.

1voto

Mat A Points 1

Vous pourriez très simplement utiliser la commande tmux sur votre serveur distant. Cela vous permet d'ouvrir une "session" sur la machine distante où vous exécuterez votre code à distance.

Ensuite, vous pouvez quitter (ou perdre la connexion dans votre cas) la machine distante sans vous inquiéter étant donné que votre code s'exécute en toute sécurité dans votre session tmux.

Enfin, lorsque vous vous reconnectez sur le serveur distant, il vous suffit de taper tmux attach pour revenir à la session que vous aviez précédemment ouverte et c'est tout.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X