Setelah mengirim perintah shutdown, sesi ssh tidak berakhir

12

Setiap kali saya mengirim perintah untuk mematikan atau memulai kembali server Debian saya, shell saya dibiarkan menggantung dan tidak responsif (tidak bisa mengetikkan perintah apa pun).

masukkan deskripsi gambar di sini

Melakukan tindakan yang sama di Ubuntu menghasilkan sesi ditutup dengan anggun sehingga saya tidak memiliki terminal terikat yang menggantung di sana. Apakah ada paket yang harus saya instal atau perubahan konfigurasi yang harus dibuat sehingga saya bisa mendapatkan perilaku yang sama di Debian?

Programster
sumber
Apakah perilaku yang sama terjadi dengan sudo shutdown -h now(untuk mematikan), dan / atau sudo reboot(untuk memulai kembali)?
eyoung100
ya, itu terjadi dengan mereka juga.
Programster
2
NB Anda dapat membunuh salah satu dari sesi ssh yang digantung ini dengan mengetikkan <enter>, tilde, dan titik (~.).
Kenster

Jawaban:

11

Ini bekerja untuk saya:

apt-get install libpam-systemd dbus

Juga pastikan bahwa Anda memiliki UsePAM yeskonfigurasi ssh Anda.

grep -i UsePAM /etc/ssh/sshd_config

Sayangnya, Anda harus mem-boot ulang agar solusi dapat berfungsi ...

Penjelasan terperinci tentang kesalahan server .

mivk
sumber
Saya baru saja mengalami masalah yang sama pada ubuntu 16.04 di mana solusi sebelumnya tidak berfungsi tetapi yang ini tidak.
Programster
7

Sepertinya itu adalah systemdmasalah yang saat ini dilacak di bawah bug # 751636 .

Ketika host dimatikan atau dihidupkan ulang, systemdmungkin mematikan jaringan sebelum membunuh sesi ssh.

Ada beberapa solusi yang disediakan tetapi tidak ada yang konkret:

  1. Menggunakan acpid/acpi-support-baseuntuk menangani peristiwa daya & menambahkan berikut ini ke/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
    

    dan kemudian buat alias di ~/.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. Menciptakan /etc/systemd/system/ssh-user-sessions.servicedengan yang berikut di dalamnya:

    [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
sumber
itu baik untuk mengetahui itu bug yang diketahui tentang. Saya mencoba solusi kedua, tetapi sepertinya tidak berhasil bagi saya ketika mengirim perintah reboot. Saya memastikan untuk membuatnya dieksekusi.
Programster
1
Muat ulang daemon systemd:, systemctl daemon-reloadjuga agar dapat mengaktifkan layanan systemd segera: systemctl start ssh-user-sessions.servicedan untuk mengaktifkan layanan saat bootupsystemctl enable ssh-user-sessions.service
neuron
Menjalankan 2 commnds pertama berhasil. Menjalankan perintah ketiga menghasilkan: The unit files have no [Install] section. They are not meant to be enabled using systemctl.tetapi tampaknya tidak diperlukan.
Programster
Ya, lupa menyebutkan bahwa file Unit mungkin termasuk "[Install]"bagian, yang membawa informasi instalasi untuk unit. Bagian ini tidak ditafsirkan oleh systemdselama runtime. Hal ini digunakan secara eksklusif oleh mengaktifkan dan menonaktifkan perintah dari systemctlalat selama instalasi unit.
neuron
Saya menambahkan [Install]diikuti oleh WantedBy=multi-user.targetke file, yang mengakibatkan systemctl enable ssh-user-sessions.servicetidak membuang kesalahan dan mengakibatkan layanan berlaku di seluruh reboot. Apakah ada yang salah dengan melakukan ini?
Programster