145 votes

Comment empêcher SSH de se déconnecter s'il est resté inactif pendant un certain temps ?

J'ai une connexion ssh avec une machine qui est déconnectée par cette machine après 30 minutes sans intervention de l'utilisateur. Cependant, si je lance quelque chose comme top la connexion reste active. Comme il s'agit de la machine d'un client, je ne peux pas reconfigurer le serveur SSH de cette machine. Je cherche donc un moyen de détecter automatiquement l'inactivité et de lancer quelque chose du genre top . Une sorte d'"économiseur d'écran" pour Bash.

Je sais que je peux le faire avec screen mais malheureusement screen n'est pas installé, et je ne peux pas installer de logiciel. Je dois donc utiliser ce que propose Bash.

Pour être clair : je cherche une solution qui me permette de démarrer une fois après m'être connecté, puis d'utiliser ce terminal, de m'éloigner, de revenir deux heures plus tard et de continuer à travailler, sans avoir à taper quoi que ce soit avant de m'éloigner. De même, je ne cherche pas à faire du tunneling (pour cela, je recommande l'excellent outil sshuttle )

Des idées ?

0 votes

Juste une petite note pour préciser que screen et Keepalive ne sont pas la même chose : par exemple, si le client ou le serveur ssh se déconnecte, votre session ssh sera terminée même si vous avez activé KeepAlive, alors qu'un screen Shell ne sera pas terminé.

4 votes

170voto

Mike Pennington Points 2809

Pour être clair : je cherche une solution que je lance une fois après m'être connecté, puis je veux utiliser ce terminal, m'éloigner, revenir deux heures plus tard et continuer à travailler, sans avoir à taper quoi que ce soit avant de partir.

Le problème est qu'il y a quelque chose (généralement un pare-feu ou un équilibreur de charge) qui abandonne les sessions inactives. Si vous configurez des sessions keepalives, celles-ci empêcheront les périphériques réseau de considérer la session comme inactive.

Correction de Linux / Unix / Cygwin OpenSSH :
La solution la plus simple est d'activer les keepalives du client ssh ; cet exemple enverra un keepalive ssh toutes les 60 secondes :

ssh -o "ServerAliveInterval 60" <SERVER_ADDRESS>

Si vous voulez activer cette fonction sur toutes vos sessions, mettez ceci dans votre fichier /etc/ssh/ssh_config o ~/.ssh/config :

ServerAliveInterval 60

Pour plus d'informations, voir le ssh_config page d'accueil

Mastic Fix :

Enregistrez ceci dans vos "paramètres par défaut" de PuTTY...

  • Cliquez sur Connexion
  • Tapez 60 dans "Secondes entre keepalives".

putty_screenshot

64voto

Murmel Points 885

En plus de La réponse de Mike Pennington je voudrais vous faire savoir que ServerAliveCountMax aussi.

  • El ServerAliveInterval enverra un keepalive toutes les x secondes (la valeur par défaut est 0 qui désactive cette fonction si elle n'est pas réglée sur autre chose).
  • Cela sera fait ServerAliveCountMax fois si aucune réponse n'est reçue. La valeur par défaut de ServerAliveCountMax es 3 (voir Page d'accueil ssh_config ).

Exemple : Si vous définissez ServerAliveInterval a 60 et laisser ServerAliveCountMax tel qu'il est, cela signifie que le keepalive attendra seulement 3 * 60 = 180 seconds = 3 minutes avant d'arrêter.

Pour augmenter cette durée à, par exemple, 2 heures d'essai pour maintenir la connexion en vie, vous pouvez faire :

Par commande :

Vous devez donc envisager de définir

ssh -o "ServerAliveInterval 60" -o "ServerAliveCountMax 120" <SERVER_ADDRESS>

Persistant :

Pour le rendre persistant, écrivez-le dans /etc/ssh/ssh_config (s'appliquera à l'ensemble du système) ou ~/.ssh/config (s'appliquera uniquement à l'utilisateur) :

ServerAliveInterval 60
ServerAliveCountMax 120

Note

Comme dislick a correctement souligné En fonction de votre situation, ce n'est peut-être pas ce que vous souhaitez :

  • Si vous souhaitez mettre fin rapidement à la session dès que le serveur ne répond plus, vous devez choisir une valeur faible pour la variable ServerAliveCountMax .
  • Si vous êtes davantage intéressé par le maintien d'une connexion déjà établie (par exemple, si vous prenez le train et que la latence est élevée), vous devez choisir une valeur plus élevée pour le paramètre ServerAliveCountMax pour permettre ssh de continuer à essayer de rétablir la connexion.

Voir aussi :

6 votes

Je suis désolé, mais ce n'est pas correct. ServerAliveCountMax spécifie le nombre de messages de serveur vivant qui peuvent être envoyés sans recevoir des messages en retour du serveur. Si vous souhaitez ssh pour sortir après qu'il se soit figé (afin que vous puissiez le redémarrer), vous devriez en fait définir le paramètre ServerAliveCountMax à un faible nombre. Voir le page de manuel Lien OP.

1 votes

@dislick J'ai dû réfléchir un peu à ce sujet, mais je pense que vous avez raison en fonction du contexte, c'est pourquoi j'ai ajouté une note pour souligner le contexte.

0 votes

@dislick il me semble que ce qui est posté ici est tout à fait correct. Citation de la page de manuel : "Si, par exemple, ServerAliveInterval (voir ci-dessous) est fixé à 15 et ServerAliveCountMax est laissé par défaut, si le serveur ne répond plus, ssh se déconnectera après environ 45 secondes".

13voto

jdhao Points 320

J'utilise Mobaxterm et j'ai également rencontré ce problème. Mobaxterm est également livré avec une option permettant de maintenir le client en vie lorsque celui-ci est inactif. Allez sur Settings -> Configuration -> SSH . Il y a une section intitulée SSH settings vérifiez l'option SSH keepalive . Ensuite, le problème devrait disparaître.

enter image description here

3 votes

La fonction "SSH keepalive" fonctionne-t-elle dans l'édition gratuite ? ma session est déconnectée même après avoir vérifié cette option.

1 votes

Oui, cela fonctionne. Votre problème peut avoir d'autres causes.

1 votes

J'ai le même problème que @samshers

1voto

Noajm IsMy Name Points 43

Il n'est jamais trop tard...

Mais si vous n'utilisez qu'une interface non graphique, il est préférable d'avoir quelque chose de mieux que top pourrait être crontab .

Il suffit de créer un script bash qui mkdir et rm ce dossier toutes les 5 minutes

o

envoyer /dev/null a /dev/null . lol.

0 votes

Comment cela peut-il empêcher ssh de se déconnecter ?

0 votes

@Noajm Avez-vous essayé si cela fonctionne ? Pourquoi crontab ? Il n'est pas facile de savoir à partir d'un script/programme exécuté en crontab si une session ssh est active, et où (quel tty) envoyer la sortie ? Il y a aussi des inconvénients à écrire et supprimer quelque chose sur le disque (si vous n'avez pas de partition pour écrire ?). BTW Si cela fonctionne avec top peut-être qu'il fonctionne juste en cours d'exécution date toutes les 5 minutes, mais à partir d'un script ... s'il vous plaît éditer votre message si vous souhaitez modifier quelque chose.

0 votes

Essayez-le. Je l'utilise pour le serveur de mon collège et il fonctionne bien pour moi. Il m'expulse au bout de 2 ou 3 jours

0voto

Que diriez-vous d'un watch 'mkdir temp; ls -l temp; rmdir temp ?

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