После отправки команды выключения сессия ssh не завершается

12

Всякий раз, когда я отправляю команду на отключение или перезапуск серверов Debian, моя оболочка остается зависшей и не отвечает (не может вводить какие-либо команды).

введите описание изображения здесь

Выполнение того же действия в Ubuntu приводит к тому, что сессия изящно закрывается, поэтому у меня нет привязанного терминала, оставшегося там. Нужно ли установить какой-либо пакет или внести изменения в конфигурацию, чтобы я мог получить такое же поведение в Debian?

Programster
источник
То же самое происходит с sudo shutdown -h now(для отключения питания) и / или sudo reboot(для перезапуска)?
eyoung100
да, это происходит и с теми.
Программист
2
NB. Вы можете убить один из этих зависших сеансов ssh, набрав <enter>, tilde и period (~.).
Кенстер

Ответы:

11

Это сработало для меня:

apt-get install libpam-systemd dbus

Также убедитесь, что у вас есть UsePAM yesв вашей конфигурации SSH.

grep -i UsePAM /etc/ssh/sshd_config

К сожалению, вам нужно перезагрузиться, чтобы решение вступило в силу ...

Подробные объяснения о сбое сервера .

mivk
источник
У меня просто была та же проблема на Ubuntu 16.04, для которой предыдущее решение не сработало, но это сработало.
Программист
7

Похоже, что эта systemdпроблема в настоящее время отслеживается под ошибкой # 751636 .

Когда хост выключен или перезапущен, systemdможет завершить работу сети, прежде чем он убьет сеанс ssh.

Предлагается пара решений, но ничего конкретного:

  1. Использование acpid/acpi-support-baseдля обработки событий питания и добавления следующего к/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
    

    а затем сделайте псевдонимы в вашем ~/.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. Создание /etc/systemd/system/ssh-user-sessions.serviceсо следующим:

    [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
    
нейрон
источник
хорошо знать, что это ошибка, о которой известно. Я попробовал второе решение, но оно не работает для меня при отправке команды перезагрузки. Я убедился, чтобы сделать его исполняемым.
Программист
1
Перезагрузите демон systemd:, systemctl daemon-reloadтакже для немедленной активации службы systemd: systemctl start ssh-user-sessions.serviceи для включения службы при загрузкеsystemctl enable ssh-user-sessions.service
нейрон
Выполнение первых 2-х команд сделало свое дело. Выполнение третьей команды привело к: The unit files have no [Install] section. They are not meant to be enabled using systemctl.но, похоже, не нужно.
Программист
Да, забыл упомянуть, что файл модуля может содержать "[Install]"раздел, содержащий информацию об установке модуля. Этот раздел не интерпретируется systemdво время выполнения. Он используется исключительно командами включения и выключенияsystemctl инструмента во время установки устройства.
нейрон
[Install]После этого я добавил WantedBy=multi-user.targetв файл, что привело к тому, что systemctl enable ssh-user-sessions.serviceошибка не выдается, а служба перезапустится. Что-то не так с этим?
Programster