Nach dem Senden des Befehls zum Herunterfahren wird die ssh-Sitzung nicht beendet


12

Immer wenn ich den Befehl zum Ausschalten oder Neustarten meiner Debian-Server sende, bleibt meine Shell hängen und reagiert nicht (ich kann keine Befehle eingeben).

Geben Sie hier die Bildbeschreibung ein

Wenn Sie dieselbe Aktion in Ubuntu ausführen, wird die Sitzung ordnungsgemäß geschlossen, sodass dort kein gebundenes Terminal mehr hängt. Gibt es ein Paket, das ich installieren muss, oder eine Konfigurationsänderung, damit ich das gleiche Verhalten unter Debian erhalten kann?


Tritt das gleiche Verhalten bei sudo shutdown -h now(beim Ausschalten) und / oder sudo reboot(beim Neustart) auf?
eyoung100

ja, das kommt auch bei denen vor.
Programster

2
Hinweis: Sie können eine dieser blockierten SSH-Sitzungen beenden, indem Sie <enter>, tilde und period (~.) Eingeben.
Kenster

Antworten:


11

Das hat bei mir funktioniert:

apt-get install libpam-systemd dbus

Stellen Sie außerdem sicher, dass Sie UsePAM yesin Ihrer SSH-Konfiguration haben.

grep -i UsePAM /etc/ssh/sshd_config

Leider müssen Sie neu starten, damit die Lösung wirksam wird ...

Detaillierte Erklärungen zum Serverfehler .


Ich hatte gerade das gleiche Problem auf Ubuntu 16.04, für das die vorherige Lösung nicht funktionierte, aber diese.
Programster

7

Es sieht so aus, als ob dies ein systemdProblem ist, das derzeit unter Fehler # 751636 verfolgt wird .

Wenn der Host heruntergefahren oder neu gestartet wird, wird systemdmöglicherweise das Netzwerk heruntergefahren, bevor die SSH-Sitzung beendet wird.

Es gibt einige Lösungen, aber nichts Konkretes:

  1. Verwenden Sie acpid/acpi-support-base, um die Energieereignisse zu behandeln und fügen Sie Folgendes hinzu/etc/acpi/powerbtn-acpi-support.sh

    else
    -       # Normal handling.
    -       /sbin/shutdown -h -P now "Power button pressed"
    +
    +       if [ -x /bin/systemctl ] ; then
    +           echo "\nPower button pressed\nThe system is going down for system halt NOW!" |\
    +            /usr/bin/wall -n
    +           /bin/systemctl --force poweroff
    +       else
    +           # Normal handling.
    +           /sbin/shutdown -h -P now "Power button pressed"
    +       fi
    +
    fi
    

    und machen Sie dann Aliase in Ihrem ~/.bashrc:

    alias reboot='echo "The system is going down for system reboot NOW!" |\
    /usr/bin/wall -n ; /bin/systemctl --force reboot'
    
    alias poweroff='echo "The system is going down for system halt NOW!" |\
    /usr/bin/wall -n ; /bin/systemctl --force poweroff'
    
  2. Erstellen /etc/systemd/system/ssh-user-sessions.servicemit folgendem Inhalt:

    [Unit]
    Description=Shutdown all ssh sessions before network
    After=network.target
    
    [Service]
    TimeoutStartSec=0
    Type=oneshot
    RemainAfterExit=yes
    ExecStart=/bin/true
    ExecStop=/usr/bin/killall sshd
    

Es ist gut zu wissen, dass es sich um einen bekannten Fehler handelt. Ich habe die zweite Lösung ausprobiert, aber sie scheint beim Senden des Neustartbefehls nicht zu funktionieren. Ich habe dafür gesorgt, dass es ausführbar ist.
Programster

1
Laden Sie den systemd-Daemon neu: systemctl daemon-reloadauch, um den systemd-Dienst sofort zu aktivieren: systemctl start ssh-user-sessions.serviceund um den Dienst beim Booten zu aktivierensystemctl enable ssh-user-sessions.service
Neuron

Das Ausführen der ersten beiden Befehle hat den Trick getan. Das Ausführen des dritten Befehls führte zu: The unit files have no [Install] section. They are not meant to be enabled using systemctl.scheint aber nicht erforderlich zu sein.
Programster

Ja, ich habe vergessen zu erwähnen, dass die Gerätedatei möglicherweise einen "[Install]"Abschnitt enthält, der Installationsinformationen für das Gerät enthält. Dieser Abschnitt wird zur systemdLaufzeit nicht von interpretiert . Es wird ausschließlich von den Aktivierungs- und Deaktivierungsbefehlen des systemctlTools während der Installation eines Geräts verwendet.
Neuron

Ich habe [Install]gefolgt von WantedBy=multi-user.targetder Datei hinzugefügt , was dazu führte, dass systemctl enable ssh-user-sessions.servicekein Fehler ausgegeben wurde und der Dienst über Neustarts hinweg wirksam wurde. Ist daran etwas falsch?
Programster
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.