Quel est le délai d'inactivité par défaut pour OpenSSH?

25

Je n'arrive pas à trouver une réponse à cette simple question, dont j'ai besoin pour certains documents de conformité.

Sur une installation par défaut de CentOS 6.5 (OpenSSH 5.3p1-94.el6), après combien de temps d'inactivité la session SSH d'un utilisateur sera-t-elle terminée? Je crois que les éléments suivants peuvent être définis pour augmenter le délai d'inactivité, mais ils sont mis en commentaire par défaut.

$ grep -i alive /etc/ssh/sshd_config
#TCPKeepAlive yes
#ClientAliveInterval 0
#ClientAliveCountMax 3

Existe-t-il également une commande pour vider une liste des sshdparamètres actuels ? Je ne vois rien dedans man sshd.

Banjer
la source
3
Certains shells peuvent être configurés pour quitter après une temporisation. Cela entraînerait la fin de la session ssh. Vérifiez si votre variable d'environnement TMOUT est définie.
Kenster

Réponses:

23

Les lignes commentées sshd_configaffichent généralement les valeurs par défaut. C'est le cas de toutes les lignes de votre question. Vous pouvez le vérifier dans la sshd_configpage de manuel . Voici les extraits pertinents:

TCPKeepAlive

      Spécifie si le système doit envoyer des messages TCP keepalive de l'autre côté. S'ils sont envoyés, la mort de la connexion ou le crash de l'une des machines sera correctement constaté. Cependant, cela signifie que les connexions seront interrompues si l'itinéraire est temporairement interrompu, et certaines personnes le trouvent ennuyeux. D'un autre côté, si les keepalives TCP ne sont pas envoyés, les sessions peuvent se bloquer indéfiniment sur le serveur, laissant des utilisateurs «fantômes» et consommant les ressources du serveur.

      La valeur par défaut est «oui» (pour envoyer des messages TCP keepalive), et le serveur remarquera si le réseau tombe en panne ou que l'hôte client plante. Cela évite les sessions infiniment suspendues.

      Pour désactiver les messages TCP keepalive, la valeur doit être définie sur «non».

      Cette option était auparavant appelée KeepAlive.

ClientAliveCountMax

      Définit le nombre de messages client actifs (voir ci-dessous) qui peuvent être envoyés sans que sshd (8) ne reçoive de message du client. Si ce seuil est atteint pendant l'envoi des messages du client vivant, sshd déconnectera le client, mettant fin à la session. Il est important de noter que l’utilisation des messages clients vivants est très différente deTCPKeepAlive (au dessous de)(au dessus de). Les messages client actifs sont envoyés via le canal crypté et ne seront donc pas usurpés. L'option TCP keepalive activée par TCPKeepAliveest usurpée. Le mécanisme du client vivant est utile lorsque le client ou le serveur dépendent de savoir quand une connexion est devenue inactive.

      La valeur par défaut est 3. Si ClientAliveInterval(voir ci-dessous) est défini sur 15 et ClientAliveCountMaxest laissé par défaut, les clients SSH qui ne répondent pas seront déconnectés après environ 45 secondes. Cette option s'applique uniquement à la version 2 du protocole.

ClientAliveInterval

      Définit un délai d'expiration en secondes après lequel si aucune donnée n'a été reçue du client, sshd (8) enverra un message via le canal crypté pour demander une réponse au client. La valeur par défaut est 0, indiquant que ces messages ne seront pas envoyés au client. Cette option s'applique uniquement à la version 2 du protocole.

jordanm
la source
1
Corrigez-moi si je me trompe, mais s'il n'y avait pas de pare-feu entre moi et la machine (avec les configurations par défaut), alors je ne serais jamais déconnecté? Je sais que notre pare-feu supprime les connexions TCP inactives après 60 minutes, c'est donc là que les connexions inactives se ferment. Je voulais juste vérifier et voir si OpenSSH lui-même ferme explicitement les sessions. Je pense que la réponse est non, openssh ne ferme pas explicitement les connexions inactives, mais les pare-feu le font généralement . Les paramètres mentionnés dans votre réponse aident réellement à maintenir la connexion ou à terminer correctement la session s'il voit qu'elle a été supprimée.
Banjer
2
Le texte cité indique que la valeur par défaut pour ClientAliveInterval est 0, ce qui signifie qu'il ne définit pas d'intervalle de temps pendant lequel une connexion reste ouverte. Et pourtant, nous savons que l'intervalle de temps a une valeur finie par défaut. Il semble donc qu'il doit y avoir un autre paramètre qui définit la durée pendant laquelle la connexion reste ouverte par défaut. Si mon analyse ci-dessus est correcte, supposez que le serveur et le client sont des machines Linux exécutant openssh, et que les deux utilisent toutes les valeurs par défaut. Dans ce cas, quel côté définit la valeur par défaut, quelle est sa valeur et où est-elle définie?
Ben Crowell
2
@BenCrowell Et pourtant, nous savons que l'intervalle de temps a une valeur finie par défaut. Quel intervalle de temps et comment le savez-vous?
Piotr Dobrogost
9

Vous pouvez configurer SSH keepalive pour le côté client ou serveur:

Côté client

Fichier: /etc/ssh/ssh_config

Contenu:

Host *
ServerAliveInterval XX
ServerAliveCountMax YY

Du côté serveur

Fichier: /etc/ssh/sshd_config

Contenu:

ClientAliveInterval XX
ClientAliveCountMax YY

Extrait de: http://www.sysadmit.com/2016/02/linux-y-vmware-ssh-evitar-desconexion.html

Yamanoteone
la source
6
Utile, mais ne répond en aucune façon à la question.
bzeaman
6

OpenSSH ne mettra pas fin à une session shell qui était inactive depuis un certain temps. Ce n'est pas quelque chose qu'OpenSSH fait. La fin d'une session shell inactive n'est pas liée à la configuration d'OpenSSH.

Les paramètres que vous affichez sont liés aux délais d'expiration lorsque la connexion est interrompue et ne sont pas liés au shell sur l'hôte distant et à ce que l'utilisateur y fait ou ne le fait pas.

Le shell de l'hôte distant peut se terminer (ou être tué par un autre processus) après un certain temps d'inactivité, mais cela n'est pas lié à la configuration du service SSH sur le serveur et de votre client SSH.

En relation:


Pour vider la sshdconfiguration, utilisez le "mode de test étendu" en tant que root:

sshd -T

Ceci est documenté dans le sshd(8)manuel (en regardant OpenSSH_7.7, LibreSSL 2.7.2sur OpenBSD ici):

-T

Mode de test étendu. Vérifiez la validité du fichier de configuration, exportez la configuration effective vers stdout, puis quittez . Facultativement, les règles de correspondance peuvent être appliquées en spécifiant les paramètres de connexion à l'aide d'une ou plusieurs -Coptions.

Cette option a été ajoutée à sshdOpenSSH 5.1 / 5.1p1 en 2008.

Kusalananda
la source
3

Si l'exigence est de fermer la connexion SSH après une période d'inactivité, les shells eux-mêmes fournissent des variables de délai d'expiration.

Pour bash:

TMOUT: s'il est défini sur une valeur supérieure à zéro, TMOUT est traité comme le délai d'expiration par défaut pour la lecture intégrée. La commande select se termine si l'entrée n'arrive pas après TMOUT secondes lorsque l'entrée provient d'un terminal. Dans un shell interactif, la valeur est interprétée comme le nombre de secondes d'attente pour l'entrée après l'émission de l'invite principale. Bash se termine après avoir attendu ce nombre de secondes si l'entrée n'arrive pas.

testez cela en exécutant TMOUT=10et attendez 10 secondes pour fermer la connexion.

Pour tcsh:

La variable shell de déconnexion automatique peut être définie pour se déconnecter ou verrouiller le shell après un nombre donné de minutes d'inactivité.

Dans tcsh, la syntaxe pour définir le délai d'attente de dix minutes est set autologout=10. Cela ne fonctionne pas dans le csh d'origine.

Sandeep kumar singh
la source
-2

Si vous souhaitez que le délai soit de 10 secondes pour tout le monde, procédez comme suit pour la configuration du serveur (sshd_config):

ClientAliveInterval 10
ClientAliveCountMax 0

Si vous souhaitez que le délai soit de 10 secondes pour les clients locaux, procédez comme suit pour la configuration du client (ssh_config):

ServerAliveInterval 10
ServerAliveCountMax 0

Si le paramètre AliveCountMax est différent de zéro, cela ne fonctionnera probablement pas car le serveur répondra en réinitialisant le minuteur (sauf en cas de problème de connexion). Vous pouvez le voir en exécutant le client ssh avec le débogage activé.

JohnA
la source