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?

Programmierer
quelle
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 .

mivk
quelle
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
    
Neuron
quelle
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