发送关闭命令后,ssh会话不会终止


12

每当我发送关闭或重新启动Debian服务器的命令时,我的shell就会挂起并且无响应(无法键入任何命令)。

在此处输入图片说明

在Ubuntu中执行相同的操作会导致会话正常关闭,因此我没有一个捆绑的终端挂在那里。是否需要安装一个软件包或进行配置更改,以便在Debian上获得相同的行为?


sudo shutdown -h now(关闭电源)和/或sudo reboot(重新启动)是否会发生相同的行为?
eyoung100

是的,它也发生在那些人身上。
Programster

2
注意,您可以通过键入<enter>,波浪号和句点(〜。)来杀死这些挂起的ssh会话之一。
肯斯特,2015年

Answers:


11

这为我工作:

apt-get install libpam-systemd dbus

还要确保您UsePAM yes在ssh配置中。

grep -i UsePAM /etc/ssh/sshd_config

不幸的是,您需要重新启动才能使解决方案生效...

关于serverfault的详细说明。


我在ubuntu 16.04上遇到了同样的问题,以前的解决方案无法解决,但这个解决方案可以解决。
Programster

7

看来这是systemd当前在Bug#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
重新加载systemd守护程序:systemctl daemon-reload也按顺序立即激活systemd服务: systemctl start ssh-user-sessions.service和,以使在启动服务systemctl enable ssh-user-sessions.service
神经元

运行前两个命令就可以了。运行第三个命令会导致:The unit files have no [Install] section. They are not meant to be enabled using systemctl.但似乎不需要。
Programster

是的,忘了提到单元文件可能包含一个"[Install]"部分,其中包含该单元的安装信息。systemd在运行期间不会解释此部分。在单元安装期间,它仅由工具的启用禁用命令systemctl使用。
神经元

我在文件中添加了,[Install]然后添加WantedBy=multi-user.target了文件,这导致systemctl enable ssh-user-sessions.service未引发错误,并导致服务在重新启动后生效。这样做有什么问题吗?
Programster
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.