Після відправлення команди відключення ssh сеанс не закінчується


12

Щоразу, коли я надсилаю команду вимкнути або перезапустити сервери Debian, моя оболонка залишається висною і не відповідає (не можу вводити жодної команди).

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

Виконання тієї ж дії в Ubuntu призводить до того, що сеанс витончено закривається, тому у мене не залишається підвішений термінал. Чи потрібно встановити пакет або зробити зміну конфігурації, щоб я міг отримати таку саму поведінку на Debian?


Чи трапляється така ж поведінка з sudo shutdown -h now(для живлення) та / або sudo reboot(для перезавантаження)?
eyoung100

так, це трапляється і з тими.
Programster

2
Зверніть увагу: ви можете вбити один із цих вивішених ssh сесій, ввівши <enter>, tilde та period (~.).
Кенстер

Відповіді:


11

Це працювало для мене:

apt-get install libpam-systemd dbus

Також переконайтеся, що у вас є UsePAM yesконфігурація ssh.

grep -i UsePAM /etc/ssh/sshd_config

На жаль, вам потрібно перезавантажити, щоб рішення набуло чинності ...

Детальні пояснення на сервері за замовчуванням .


У мене була та сама проблема з ubuntu 16.04, для якої попереднє рішення не працювало, але це було.
Programster

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
    

це добре знати його помилку, про яку відомо. Я спробував друге рішення, але, здається, він не працює на мене при надсиланні команди перезавантаження. Я переконався, щоб зробити його виконуваним.
Programster

1
Перезавантажте системний демон:, 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.але, здається, не потрібно.
Programster

Так, забув згадати, що файл Unit може містити "[Install]"розділ, який містить інформацію про встановлення для блоку. Цей розділ не інтерпретується під systemdчас виконання. Він використовується виключно командами включення та відключенняsystemctl інструменту під час встановлення блоку.
нейрон

Я додав, [Install]а потім WantedBy=multi-user.targetфайл, у результаті чого systemctl enable ssh-user-sessions.serviceпомилка не виводилась, а послуга набирала чинності під час перезавантаження. Чи є щось погано в цьому?
Programster
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.