J'ai un serveur qui exécute Debian et sshd dessus, et au cas où j'aurais besoin de redémarrer le serveur, ma session SSH se bloque côté client jusqu'au délai TCP. Je suppose que cela est dû au fait que lorsqu'il sshd
est terminé, il ne ferme pas explicitement les sessions SSH ouvertes à l'hôte. Que dois-je faire pour d' sshd
abord déconnecter tout le monde, puis se terminer normalement? Jusqu'à présent, je ne vois pas de paramètre man sshd_config
lié au comportement de fermeture.
13
Réponses:
Lorsque vous
systemd
arrêtez ou redémarrez votre système, essaie d'arrêter tous les services aussi vite que possible. Cela implique d'arrêter le réseau et de mettre fin à tous les processus qui sont toujours en vie - généralement dans cet ordre. Ainsi, lorsque systemd tue les processus SSH bifurqués qui gèrent vos sessions SSH, la connexion réseau est déjà désactivée et ils n'ont aucun moyen de fermer la connexion client avec élégance.Votre première pensée pourrait être de simplement tuer tous les processus SSH comme première étape lors de l'arrêt, et il existe de nombreux fichiers de service systemd qui font exactement cela.
Mais il y a bien sûr une solution plus propre ( la façon dont il est « censé » être fait):
systemd-logind
.systemd-logind
garde une trace des sessions utilisateur actives (locales et SSH) et affecte tous les processus générés en leur sein à ce qu'on appelle des "tranches". De cette façon, lorsque le système est arrêté, systemd peut simplement SIGTERM tout ce qui se trouve dans les tranches utilisateur (qui inclut le processus SSH fourchu qui gère une session particulière), puis continuer à arrêter les services et le réseau.systemd-logind
nécessite un module PAM pour être averti des nouvelles sessions utilisateur et vous devrez l'dbus
utiliserloginctl
pour vérifier son état, alors installez les deux:Assurez-vous que vous
/etc/ssh/sshd_config
allez réellement utiliser le module avecUsePAM yes
.la source
reboot
, effectuez une opérationshutdown -r
qui prend par défaut un délai d'une minute, vous laissant le temps de fermer la session SSH.C'est quelque chose que vous devez définir côté client, pas côté serveur. Modifiez votre
~/.ssh/config
pour contenirCela signifie qu'après 15 secondes d'inactivité, votre client enverra un message au serveur. S'il n'obtient aucune réponse, il réessayera jusqu'à 5 fois, et s'il n'obtient toujours pas de réponse, il fermera la session.
la source
Ce comportement est signalé sur ce bogue Debian , il vous suffit de configurer correctement les scripts d'arrêt livrés avec le paquet car, automatiquement, ils ne sont pas copiés par défaut:
la source
Vous pouvez spécifier les options dont Jenny D a parlé dans sa réponse juste pour une commande ssh, comme
si vous le faites souvent, vous pouvez l'écrire.
la source
Fonctionne pour moi avec lshd. La solution serait donc
la source
malheureusement, serverfault ne m'a pas permis de répondre en raison de trop de points depuis des années. Mais je n'ai pas besoin de spam dans d'autres blogs pour obtenir le déverrouillage ^^ ... donc comme réponse dédiée:
Comme l'a mentionné Rfraile
travaux. Pour l'utiliser sans redémarrer l'instance / le serveur, vous devez effectuer des tâches supplémentaires:
le service est donc enregistré et démarré et systemd doit l'arrêter à des fins de redémarrage / arrêt.
la source