Sau khi gửi lệnh tắt máy, phiên ssh không kết thúc


12

Bất cứ khi nào tôi gửi lệnh tắt hoặc khởi động lại máy chủ Debian của mình, trình bao của tôi bị treo và không phản hồi (không thể gõ bất kỳ lệnh nào).

nhập mô tả hình ảnh ở đây

Thực hiện hành động tương tự trong kết quả Ubuntu trong phiên kết thúc một cách duyên dáng để tôi không có thiết bị đầu cuối bị trói ở đó. Có gói nào tôi cần cài đặt hoặc thay đổi cấu hình được thực hiện để tôi có thể có hành vi tương tự trên Debian không?


Có hành vi tương tự xảy ra với sudo shutdown -h now(đối với poweroff) và / hoặc sudo reboot(để khởi động lại) không?
Eyoung100

Vâng, nó xảy ra với những người là tốt.
trình viên

2
NB bạn có thể giết một trong các phiên ssh treo này bằng cách nhập <enter>, dấu ngã và dấu chấm (~.).
Kenster

Câu trả lời:


11

Điều này làm việc cho tôi:

apt-get install libpam-systemd dbus

Cũng đảm bảo rằng bạn có UsePAM yestrong cấu hình ssh của bạn.

grep -i UsePAM /etc/ssh/sshd_config

Thật không may, bạn cần khởi động lại để giải pháp có hiệu lực ...

Giải thích chi tiết về serverfault .


Tôi chỉ gặp vấn đề tương tự trên Ubuntu 16.04 mà giải pháp trước đó không hoạt động nhưng giải pháp này đã làm.
trình viên

7

Có vẻ như đó là một systemdvấn đề hiện đang được theo dõi trong lỗi # 751636 .

Khi máy chủ bị tắt hoặc khởi động lại, systemdcó thể tắt mạng trước khi nó tắt phiên ssh.

Có một vài giải pháp được cung cấp nhưng không có gì cụ thể:

  1. Sử dụng acpid/acpi-support-baseđể xử lý các sự kiện điện và thêm phần sau vào/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
    

    và sau đó tạo bí danh trong ~/.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. Tạo /etc/systemd/system/ssh-user-sessions.servicevới những điều sau đây:

    [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
    

thật tốt khi biết đó là một lỗi đã biết. Tôi đã thử giải pháp thứ hai, nhưng nó dường như không hoạt động với tôi khi gửi lệnh khởi động lại. Tôi chắc chắn để làm cho nó thực thi.
Chương trình

1
Tải lại daemon systemd : systemctl daemon-reload, cũng để kích hoạt dịch vụ systemd ngay lập tức: systemctl start ssh-user-sessions.servicevà để kích hoạt dịch vụ khi khởi độngsystemctl enable ssh-user-sessions.service
neuron

Chạy 2 commnds đầu tiên đã làm được mẹo. Chạy lệnh thứ ba dẫn đến: The unit files have no [Install] section. They are not meant to be enabled using systemctl.nhưng dường như không cần thiết.
trình viên

Vâng, quên đề cập rằng tệp Đơn vị có thể bao gồm một "[Install]"phần, chứa thông tin cài đặt cho đơn vị. Phần này không được giải thích bởi systemdtrong thời gian chạy. Nó được sử dụng riêng bởi các lệnh kích hoạtvô hiệu hóasystemctl công cụ trong quá trình cài đặt một đơn vị.
nơ-ron

Tôi đã thêm vào [Install]sau đó WantedBy=multi-user.targetvào tệp, dẫn đến việc systemctl enable ssh-user-sessions.servicekhông gây ra lỗi và dẫn đến dịch vụ có hiệu lực trong các lần khởi động lại. Có điều gì sai khi làm điều này?
Chương trình
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.