หลังจากส่งคำสั่งปิดระบบเซสชัน ssh จะไม่ยุติลง


12

เมื่อใดก็ตามที่ฉันส่งคำสั่งเพื่อปิดหรือรีสตาร์ทเซิร์ฟเวอร์ Debian ของฉันเชลล์ของฉันจะหยุดทำงานและไม่ตอบสนอง (ไม่สามารถพิมพ์คำสั่งใด ๆ )

ป้อนคำอธิบายรูปภาพที่นี่

การกระทำแบบเดียวกันกับ Ubuntu ทำให้การปิดเซสชันทำได้อย่างสวยงามดังนั้นฉันจึงไม่มีเทอร์มินัลแบบผูกติดค้างไว้ที่นั่น มีแพคเกจที่ฉันจำเป็นต้องติดตั้งหรือมีการเปลี่ยนแปลงการกำหนดค่าเพื่อที่ฉันจะได้รับพฤติกรรมนี้บน Debian หรือไม่?


พฤติกรรมเดียวกันนี้เกิดขึ้นกับsudo shutdown -h now(สำหรับ poweroff) และ / หรือsudo reboot(สำหรับการรีสตาร์ท) หรือไม่
eyoung100

ใช่มันเกิดขึ้นกับสิ่งเหล่านั้นเช่นกัน
โปรแกรม

2
หมายเหตุคุณสามารถฆ่าหนึ่งในเซสชัน ssh ที่หยุดทำงานเหล่านี้ได้โดยพิมพ์ <enter>, tilde และ period (~.)
Kenster

คำตอบ:


11

สิ่งนี้ใช้ได้กับฉัน:

apt-get install libpam-systemd dbus

นอกจากนี้ตรวจสอบให้แน่ใจว่าคุณมีUsePAM yesในการกำหนดค่า SSH ของคุณ

grep -i UsePAM /etc/ssh/sshd_config

น่าเสียดายที่คุณต้องรีบูตเพื่อให้โซลูชั่นมีผล ...

คำอธิบายโดยละเอียดเกี่ยวกับข้อผิดพลาดของเซิร์ฟเวอร์


ฉันเพิ่งมีปัญหาเดียวกันบน Ubuntu 16.04 ซึ่งวิธีการแก้ปัญหาก่อนหน้านี้ไม่ทำงาน แต่อันนี้ทำ
Programster

7

ดูเหมือนว่าจะเป็นsystemdปัญหาในปัจจุบันภายใต้การติดตามข้อผิดพลาด #

เมื่อโฮสต์ถูกปิดหรือรีสตาร์ท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
    

มันเป็นการดีที่จะรู้ว่ามันเป็นข้อผิดพลาดที่รู้จักกันดี ฉันลองวิธีที่สอง แต่มันไม่ทำงานสำหรับฉันเมื่อส่งคำสั่ง reboot ฉันทำให้แน่ใจว่าจะปฏิบัติการได้
โปรแกรม

1
โหลด systemd daemon อีกครั้ง: systemctl daemon-reloadเพื่อให้สามารถเปิดใช้งานบริการ systemd ได้ทันที: systemctl start ssh-user-sessions.serviceและเพื่อเปิดใช้งานบริการเมื่อ bootupsystemctl enable ssh-user-sessions.service
neuron

การเรียกใช้ 2 commnds แรกนั้นได้หลอกลวง การรันคำสั่งที่สามส่งผลให้: 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ไม่เกิดข้อผิดพลาดและทำให้บริการมีผลในการรีบูต มีอะไรผิดปกติกับการทำเช่นนี้หรือไม่?
โปรแกรม
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.