Comment empêcher SSH de se déconnecter s'il est inactif depuis un moment

51

J'ai une connexion SSH à une machine qui est déconnectée par cette machine après 30 minutes d'inactivité de l'utilisateur. Cependant, si je commence quelque chose comme top, la connexion reste active. Puisqu'il s'agit d'un ordinateur client, je ne peux pas reconfigurer le serveur SSH de cet ordinateur. Je cherche donc un moyen de détecter automatiquement l’oisiveté et de commencer quelque chose comme ça top. Une sorte de "screensaver" pour Bash.

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

Pour être clair: je cherche une solution que je commence une fois après la connexion, puis je veux utiliser ce terminal, partir, revenir deux heures plus tard et continuer à travailler, sans rien taper avant de partir. De plus, je ne cherche pas à créer des tunnels (pour cela, je recommande l'excellent outil sshuttle ).

Des idées?

Isaac
la source
Juste une petite note pour clarifier l’écran et Keepalive ne sont pas la même chose: par exemple, si un client ou un serveur ssh est déconnecté, votre session ssh sera terminée même si vous avez KeepAlive activé, alors qu’un shell d’écran ne sera pas terminé .
MariusMatutiae

Réponses:

79

Pour être clair: je cherche une solution que je commence une fois après la connexion, puis je veux utiliser ce terminal, partir, revenir deux heures plus tard et continuer à travailler, sans rien taper 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 supprime des sessions inactives. Si vous configurez la conservation de session, celle-ci empêchera les périphériques réseau de considérer la session comme inactive.

Correctif OpenSSH sous Linux / Unix / Cygwin :
Le correctif le plus simple consiste à activer la conservation du client ssh; cet exemple enverra un keepalive ssh toutes les 60 secondes:

ssh -o "ServerAliveInterval 60" <SERVER_ADDRESS>

Si vous souhaitez l'activer sur toutes vos sessions, mettez-le dans votre /etc/ssh/ssh_configou ~/.ssh/config:

ServerAliveInterval 60

Pour plus d'informations, voir la ssh_configpage de manuel

Mastic Fix :

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

  • Cliquez sur Connexion
  • Tapez 60 dans "Secondes entre Keepalives"

putty_screenshot

Mike Pennington
la source
21

En plus de la réponse de Mike Pennigton , je voudrais également vous en informer ServerAliveCountMax.

  • Le ServerAliveIntervalva envoyer un keepalive toutes les x secondes (la valeur par défaut est 0 , ce qui désactive cette fonctionnalité si elle n'est pas définie sur autre chose).
  • Cela sera fait plusieurs ServerAliveCountMaxfois si aucune réponse n'est reçue. La valeur par défaut ServerAliveCountMaxest 3 (voir la page de manuel ssh_config ).

Exemple: Si vous réglez ServerAliveIntervalsur 60 et que vous laissez ServerAliveCountMaxtel quel, cela signifie que le keepalive n'attendra que 3 * 60 = 180 seconds = 3 minutes avant de quitter.

Pour augmenter ceci à 2 heures d’essai pour maintenir la connexion en vie, vous pouvez faire:

Par commande:

Par conséquent, vous devriez 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 à l'utilisateur uniquement):

ServerAliveInterval 60
ServerAliveCountMax 120

Remarque

Comme dislick correctement souligné , cela pourrait ne pas être ce que vous voulez, selon votre situation:

  • Si vous souhaitez terminer rapidement la session dès que le serveur ne répond plus, vous devez choisir une valeur faible pour ServerAliveCountMax.
  • Si vous souhaitez davantage conserver une connexion déjà établie (par exemple, si vous prenez le train et que vous avez une latence élevée), vous devez choisir une valeur plus élevée pour ServerAliveCountMaxpermettre sshde continuer à essayer de rétablir la connexion.

Voir également:

Murmel
la source
1
Je suis désolé, mais c'est faux. ServerAliveCountMaxspécifie la quantité de messages actifs du serveur qui peuvent être envoyés sans recevoir aucun message du serveur. Si vous souhaitez sshquitter après le gel (pour pouvoir le redémarrer), vous devez définir ServerAliveCountMaxun nombre faible . Voir la page de manuel OP liée.
Déranger
@dislick J'ai dû réfléchir un peu à cela, mais je pense que vous avez raison en fonction du contexte. J'ai donc ajouté une note pour souligner le contexte.
Murmel le
2

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

entrez la description de l'image ici

jdhao
la source
le "SSH keepalive" fonctionne-t-il dans l'édition gratuite ... ma session est en train de se déconnecter même après avoir vérifié cette option
samshers
Oui cela fonctionne. Votre problème peut avoir d'autres causes.
jdhao