Ich habe einen Server, auf dem Debian und sshd ausgeführt werden, und falls ich den Server neu starten muss, bleibt meine SSH-Sitzung auf der Clientseite bis zum TCP-Timeout hängen. Ich nehme an, dies liegt daran, dass beim sshd
Beenden offene SSH-Sitzungen für den Host nicht explizit geschlossen werden. Wie kann ich vorgehen, um die Verbindung zu sshd
trennen und sich dann wie gewohnt zu beenden? Bisher sehe ich keinen Parameter man sshd_config
, der mit dem Verhalten beim Herunterfahren zusammenhängt.
13
Antworten:
Wenn Sie Ihr System herunterfahren oder neu starten,
systemd
versuchen Sie, alle Dienste so schnell wie möglich zu stoppen. Dazu muss das Netzwerk heruntergefahren und alle noch aktiven Prozesse beendet werden - normalerweise in dieser Reihenfolge. Wenn systemd die gespaltenen SSH-Prozesse beendet, die Ihre SSH-Sitzungen abwickeln, ist die Netzwerkverbindung bereits deaktiviert und die Clientverbindung kann nicht ordnungsgemäß geschlossen werden.Ihr erster Gedanke könnte sein, einfach alle SSH-Prozesse als ersten Schritt während des Herunterfahrens abzubrechen, und es gibt etliche systemd-Dienstdateien, die genau das tun.
Aber es gibt natürlich eine sauberere Lösung (wie es „angeblich“ getan werden):
systemd-logind
.systemd-logind
Verfolgt aktive Benutzersitzungen (lokale und SSH-Sitzungen) und weist alle darin hervorgerufenen Prozesse sogenannten "Slices" zu. Wenn das System heruntergefahren wird, kann systemd auf diese Weise einfach alles in den Benutzer-Slices SIGTERMEN (einschließlich des gegabelten SSH-Prozesses, der eine bestimmte Sitzung leitet) und dann die Dienste und das Netzwerk weiter herunterfahren.systemd-logind
erfordert ein PAM-Modul, um über neue Benutzersitzungen informiert zu werden, und Sie müssendbus
es verwendenloginctl
, um den Status zu überprüfen. Installieren Sie daher beide:Stellen Sie sicher, dass Sie
/etc/ssh/sshd_config
das Modul tatsächlich mit verwendenUsePAM yes
.quelle
reboot
, führen Sie eineshutdown -r
der standardmäßig auf eine Verzögerung von 1 Minute, so dass Sie Zeit , um die SSH - Sitzung zu schließen.Dies ist etwas, das Sie auf der Client-Seite einstellen müssen, nicht auf der Server-Seite. Bearbeiten Sie Ihre
~/.ssh/config
zu enthaltenDies bedeutet, dass Ihr Client nach 15 Sekunden Inaktivität eine Nachricht an den Server sendet. Wenn es keine Antwort erhält, wird es bis zu fünf Mal erneut versuchen. Wenn es immer noch keine Antwort erhält, wird die Sitzung geschlossen.
quelle
Dieses Verhalten wird in diesem Debian- Fehler gemeldet. Sie müssen nur die mit dem Paket gelieferten Shutdown-Skripte korrekt einrichten, da sie automatisch nicht standardmäßig kopiert werden:
quelle
Sie können die Optionen, über die Jenny D in ihrer Antwort gesprochen hat, nur für einen ssh-Befehl angeben, z
Wenn Sie das oft tun, können Sie es skripten.
quelle
Funktioniert bei mir mit lshd. Die Lösung wäre also
quelle
Leider ließ mich serverfault seit Jahren nicht mehr mit zu wenigen Punkten im Thread antworten. Aber ich brauche keinen Spam in anderen Blogs, um die Freischaltung zu bekommen ^^ ... als dedizierte Antwort:
Wie Rfraile erwähnte
funktioniert. Um es zu verwenden, ohne die Instanz / den Server neu zu starten, sollten Sie zusätzliche Aufgaben ausführen:
Der Dienst ist also registriert und gestartet, und das System muss ihn zum Neustart / Herunterfahren anhalten.
quelle