Reconnexion automatique des connexions SSH avec une session d'écran spécifique

10

J'ai généralement plusieurs fenêtres de terminal dont chacune est connectée via ssh à un serveur distant. Dans chaque fenêtre, je travaille en utilisant le programme d'écran gnu, pour assurer la persistance des processus interactifs en cas de déconnexion.

Actuellement, chaque fois que la connexion ssh tombe (par exemple lorsque je mets mon ordinateur client en veille pendant la nuit), je dois redémarrer manuellement et fastidieusement la session ssh à l'intérieur de chaque fenêtre, puis dans chaque fenêtre, reprendre fastidieusement la session d'écran spécifique (par exemple, "écran - r 3453 "dans une fenêtre," écran -r 3462 "dans l'autre, etc.)

Existe-t-il un moyen élégant d'automatiser cela? Plus précisément:

  • reconnectez la session ssh si elle tombe, dès qu'une connexion Internet est détectée

  • exécuter l'instance d'écran spécifique pour la fenêtre du terminal dès que ssh se reconnecte

Merci pour tous les conseils à ce sujet

GJ.
la source

Réponses:

10

Vous pouvez exécuter ceci: ssh -t hostname screen -r 3453pour vous reconnecter. Si vous voulez le faire en boucle, j'utilise ce qui suit dans un script.

while true; do
    ssh -t -o BatchMode=yes eeepc-rsi "screen -r 3453"
    sleep 2
done

Cela fonctionne mieux si vous avez configuré les clés ssh afin que vous puissiez vous connecter sans taper votre mot de passe. Je vous recommande également de regarder tmux, une implémentation plus moderne de screen. J'utilise en fait le script ci-dessus avec l'écran. Vous souhaitez probablement également utiliser une session d'écran nommée plutôt que d'utiliser simplement le pid comme vous le faites dans votre exemple.

Jason Axelson
la source
Merci! À quoi sert exactement le "-o BatchMode = yes"?
GJ.
Il vous permettra de ne pas demander le mot de passe. De 'man ssh_config': "L'interrogation de mot de passe / mot de passe sera désactivée. Cette option est utile dans les scripts et autres travaux par lots où aucun utilisateur n'est présent pour fournir le mot de passe." Ne l'utilisez donc que si vous avez déjà configuré les clés ssh.
Jason Axelson
5

Pas besoin de pirater les boucles bash. Vous devez vous pencher sur l' autossh . Je ne l'ai pas beaucoup utilisé moi-même, mais je crois comprendre que vous remplacez simplement sshpar autosshdans votre commande.

Edit: En fait, autossh est livré avec un script appelé rscreenqui semble être conçu exactement à cette fin.

Ryan C. Thompson
la source