Processus SSH non tué sur la machine distante lorsque le système distant se déconnecte de manière inattendue

8

J'ai une question à laquelle je n'ai pas pu trouver de réponse. J'ai deux ordinateurs, qui exécutent tous les deux Ubuntu 12.04. Je garde un de mes ordinateurs à la maison et j'utilise SSH pour me connecter à l'autre ordinateur ("distant"). L'ordinateur distant peut se connecter sans problème à l'ordinateur domestique. L'ordinateur distant a également SetAliveInterval défini sur 60 dans / etc / ssh / ssh_config, afin que la connexion ne s'éteigne pas si je m'éloigne de l'ordinateur pendant un moment.

Parfois, ma connexion Internet sur mon ordinateur distant est interrompue. Les interruptions Internet provoquent la fermeture de mon tunnel SSH (bien sûr). Cependant, lorsque je rétablis la connectivité Internet et me reconnecte à l'ordinateur domestique à l'aide d'un nouveau tunnel SSH, je peux voir #ps axque l'ancien processus de connexion SSH est toujours en cours d'exécution. C'est un problème parce que j'utilise un répertoire personnel chiffré sur l'ordinateur personnel, ce qui ne permet pas de rechiffrer les fichiers jusqu'à ce que cette connexion SSH (maintenant morte) soit supprimée.

Existe-t-il un moyen de définir sshd_config sur l'ordinateur domestique afin qu'il détecte automatiquement la fin d'une connexion et la termine?

JL
la source

Réponses:

5

Essayez screen ou tmux . Côté serveur, ou des deux côtés si vous le souhaitez:

sudo apt-get install tmux

Après vous être connecté, démarrez tmux .

tmux

Si la connexion est interrompue, reconnectez-vous via ssh et reconnectez la session tmux . Pour découvrir le numéro de session:

tmux ls

La sortie pourrait ressembler à ceci:

Fenêtres 0: 1 (créé le 25 décembre 19:20:40 2012)

Connectez-vous à la session numérotée tmux comme ceci:

tmux attach -t 0

Ensuite, vous êtes de retour là où vous l'avez laissé. Vous n'aurez pas à tuer les sessions. Ils attendent juste votre prochaine visite. Ou, si vous voulez simplement tuer la session ...

Côté serveur, voir le /etc/ssh/sshd_configparamètre pour ClientAliveInterval et ClientAliveCountMax . ( man 5 ssh_config)

ClientAliveInterval 300
ClientAliveCountMax 0

Une fois qu'ils ont été modifiés selon vos préférences, redémarrez le serveur SSH.

sudo /etc/init.d/ssh restart

Le 300 est en secondes (cinq minutes).


la source
Ceci est exactement ce que je cherchais! Je vais commencer avec ClientAliveInterval et j'essaierai certainement tmux. Je vous remercie!
JL
1
Une troisième option en plus de Screen et Tmux est Byobu : Website , Wikipedia . D'après le site Web: "Il a été initialement conçu pour apporter des améliorations élégantes à l'écran GNU fonctionnel, simple et pratique, pour la distribution du serveur Ubuntu. Byobu comprend désormais des profils améliorés, des raccourcis clavier pratiques, des utilitaires de configuration et des notifications d'état du système à bascule. pour le gestionnaire de fenêtres d'écran GNU et le multiplexeur de terminaux Tmux plus moderne, et fonctionne sur la plupart des distributions Linux, BSD et Mac. "
sierrasdetandil
1

Vous pouvez essayer moshInstaller mosh , un remplacement de SSH construit sur SSH. Il prend en charge l'itinérance et la connectivité intermittente, de sorte que votre session Mosh (SSH) continuerait simplement là où vous l'aviez interrompue chaque fois que votre connexion Internet est rétablie après une interruption.

Vous devrez installer Mosh sur les deux machines.

Références:

Flimm
la source