357 votes

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

Je utilise un tunnel SSH depuis le travail pour contourner divers pare-feu idiots (mon patron est d'accord :)). Le problème est que, après un certain temps, la connexion SSH se bloque généralement et le tunnel est rompu.

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

Points bonus pour celui qui peut me dire comment éviter que ma connexion SSH se bloque, bien sûr !

0 votes

Est-ce que votre tunnel est mort à cause de l'inactivité? J'ai rencontré ce problème lors du tunneling des ports depuis mon téléphone, j'ai donc finalement lancé des commandes factices sur la connexion pour le maintenir "actif" en utilisant la commande watch comme ceci : watch -n1 60 echo "wiiiii". Le tunnel ne mourra pas à moins que le réseau soit compromis 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 consistait à exécuter un programme C sur un serveur Linux, et c'est simplement un petit programme C qui relance ssh en utilisant une authentification basée sur une clé.

Je ne suis pas sûr de la cause du blocage, mais j'ai vu des tunnels se terminer en raison de délais d'attente.

J'aimerais pouvoir fournir le code du relanceur, mais je ne semble pas pouvoir le trouver en ce moment.

1voto

Spadar Shut Points 151

Un peu pirater, mais j'aime utiliser screen pour cela. J'ai actuellement un transfert distant en cours depuis des semaines.

Par exemple, en commençant localement:

screen
ssh -R ......

Lorsque le transfert distant est appliqué et que vous avez un shell sur l'ordinateur distant:

screen
Ctrl + a + d

Vous avez maintenant un transfert distant ininterrompu. L'astuce est d'exécuter screen des deux côtés

1voto

Andy C Points 111

Récemment j'ai eu ce problème moi-même, car ces solutions nécessitent de ressaisir le mot de passe à chaque fois si vous utilisez une connexion par mot de passe j'ai utilisé sshpass dans une boucle avec une invite de 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 aurait 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 date de presque 10 ans à ce stade, mais j'espère que personne n'utilise le script fourni car il met 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. Ensuite, vous ne serez pas invité à saisir un mot de passe (à moins que vous n'ayez protégé la clé, bien sûr).

1voto

ceremcem Points 495

Comme autossh ne répond pas à nos besoins (il existe 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

Il crée un tunnel inversé pour le port sshd de la NODE (22) sur le serveur par défaut. Si vous devez effectuer d'autres actions (comme transmettre des ports supplémentaires, envoyer des e-mails à 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 distant.

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