Po wysłaniu polecenia zamknięcia sesja ssh nie kończy się

12

Ilekroć wysyłam polecenie wyłączenia lub ponownego uruchomienia serwerów Debiana, moja powłoka pozostaje zawieszona i nie odpowiada (nie może wpisywać żadnych poleceń).

wprowadź opis zdjęcia tutaj

Wykonanie tej samej czynności w systemie Ubuntu powoduje, że sesja jest płynnie zamykana, więc nie mam tam zawieszonego terminalu. Czy jest jakiś pakiet, który muszę zainstalować, czy też zmiana konfiguracji, aby móc uzyskać to samo zachowanie w Debianie?

Programista
źródło
Czy to samo zachowanie występuje w przypadku sudo shutdown -h now(w przypadku wyłączenia zasilania) i / lub sudo reboot(w przypadku ponownego uruchomienia)?
eyoung100
tak, dotyczy to również tych.
Programster
2
Uwaga: możesz zabić jedną z tych zawieszonych sesji ssh, wpisując <enter>, tyldę i kropkę (~.).
Kenster,

Odpowiedzi:

11

To działało dla mnie:

apt-get install libpam-systemd dbus

Upewnij się także, że masz UsePAM yesw swojej konfiguracji ssh.

grep -i UsePAM /etc/ssh/sshd_config

Niestety konieczne jest ponowne uruchomienie, aby rozwiązanie zadziałało ...

Szczegółowe wyjaśnienia dotyczące awarii serwera .

mivk
źródło
Właśnie miałem ten sam problem na Ubuntu 16.04, dla którego poprzednie rozwiązanie nie działało, ale to zadziałało.
Programster
7

Wygląda na to, że jest to systemdproblem obecnie śledzony pod błędem # 751636 .

Gdy host zostanie zamknięty lub zrestartowany, systemdmoże zamknąć sieć przed zabiciem sesji ssh.

Istnieje kilka rozwiązań, ale nic konkretnego:

  1. Używanie acpid/acpi-support-basedo obsługi zdarzeń zasilania i dodawanie następujących elementów do/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
    

    a następnie utwórz aliasy w swoim ~/.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. Tworzenie /etc/systemd/system/ssh-user-sessions.servicez następującymi elementami:

    [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
źródło
dobrze wiedzieć, że jest to znany błąd. Wypróbowałem drugie rozwiązanie, ale wydaje się, że nie działa dla mnie podczas wysyłania polecenia ponownego uruchomienia. Zadbałem o to, aby był wykonywalny.
Programster
1
Ponownie załaduj demona systemd:, systemctl daemon-reloadrównież w celu natychmiastowego aktywowania usługi systemd: systemctl start ssh-user-sessions.servicei włączenia usługi podczas uruchamianiasystemctl enable ssh-user-sessions.service
neuron
Uruchomienie pierwszych 2 commnds załatwiło sprawę. Uruchomienie trzeciego polecenia spowodowało: The unit files have no [Install] section. They are not meant to be enabled using systemctl.ale nie wydaje się potrzebne.
Programster
Tak, zapomniałem wspomnieć, że plik Jednostki może zawierać "[Install]"sekcję, która zawiera informacje instalacyjne dla jednostki. Ta sekcja nie jest interpretowana systemdpodczas działania. Jest on używany wyłącznie przez umożliwiają i niepełnosprawnymi komend z systemctlnarzędzia podczas instalacji urządzenia.
neuron
Dodałem, [Install]a następnie WantedBy=multi-user.targetdo pliku, co spowodowało, systemctl enable ssh-user-sessions.serviceże błąd nie został zgłoszony, a usługa zaczęła działać po ponownym uruchomieniu. Czy jest w tym coś złego?
Programster