安装 systemd 后系统拒绝 SSH 并卡在“启动”状态

安装 systemd 后系统拒绝 SSH 并卡在“启动”状态

我遇到了一个在 Azure 中创建的 Linux Ubuntu VM (14.04 LTS) 上可重现的问题。

通过脚本安装systemd软件包后,系统无限地拒绝新的 ssh 连接。

系统正在启动。

连接被 xxx.xxx.xxx.xxx 关闭

但活动的 ssh 连接仍保持不变。/etc/nologin系统中不存在任何文件。

我看到的唯一选择是硬重置来解决问题。但我该如何避免呢?

这是我正在使用的脚本:

#!/bin/bash

# Script input arguments
user=$1
server=$2

# Tell the shell to quote your variables to be eval-safe!

printf -v user_q '%q' "$user"
printf -v server_q '%q' "$server"
#

SECONDS=0
address="$user_q"@"$server_q"

function run {
    ssh "$address" /bin/bash "$@"
}

run << SSHCONNECTION
    # Enable autostartup

        # systemd is required for the autostartup
        sudo dpkg-query -W -f='${Status}' systemd 2>/dev/null | grep -c "ok installed" > /home/$user_q/systemd-check.txt
        systemdInstalled=\$(cat /home/$user_q/systemd-check.txt)
                
        if [[ \$systemdInstalled -eq 0 ]]; then
            echo "Systemd is not currently installed. Installing..."
            
            # install systemd
            sudo apt-get update
            sudo apt-get -y install systemd

        else
            echo "systemd is already installed. Skipping this step."
        fi

SSHCONNECTION

答案1

我怀疑有一个/etc/nologin文件(其内容是“系统正在启动。”)在 systemd 安装后未删除。

[更新]影响你的是Ubuntu 的 BTS 上报告的一个错误去年十二月。这是由于在 systemd 安装结束时未删除一个/var/run/nologin文件(=/run/nologin因为/var/run是 的符号链接)。/run

/etc/nologin是标准的 nologin 文件。/var/run/nologin是 PAM 模块可能使用的备用文件nologinman pam_nologin)。

请注意,这些nologin文件不会影响 root 用户的连接,只会阻止普通用户登录。

答案2

@xhienne 给了我正确的方向。

在搜索文件系统后,我找到了/run/nologin(@xhienne 建议 /etc/nologin)文件,删除它解决了问题。

该情况存在于/usr/lib/tmpfiles.d/systemd.conf

我将在我的脚本中包含此步骤。

sudo rm /run/nologin

答案3

Note:  This answer is applicable whether or not systemd was recently installed or not.
       The issue was observed even after systemd had been installed a long time.

Mageia 发行版错误跟踪器似乎有一个相关问题未解决: Bug 21080 - 重新启动后 /run/nologin 禁用 ssh 登录

在经常遇到此问题后,找到跟踪器有助于确定比简单删除跟踪器更合适的解决方法/运行/登录文件。

以下是与该错误跟踪器中的信息查询相关的一些数据:

$ ls -l /run/nologin 
-rw-r--r-- 1 root root 42 Mar  6 10:11 /run/nologin
$ cat /run/nologin
"System is booting up. See pam_nologin(8)"
$ date
Tue Mar  6 11:10:38 CST 2018
$ uptime
11:15:10 up  1:04,  0 users,  load average: 0.07, 0.07, 0.08
$ systemctl status systemd-user-sessions.service
● systemd-user-sessions.service - Permit User Sessions
   Loaded: loaded (/usr/lib/systemd/system/systemd-user-sessions.service; static
   Active: inactive (dead)
     Docs: man:systemd-user-sessions.service(8)
$ systemctl show -p Requires,Wants,Requisite,BindsTo,PartOf,Before,After  systemd-user-sessions.service --no-pager
Requires=system.slice sysinit.target
Requisite=
Wants=
BindsTo=
PartOf=
[email protected] prefdm.service crond.service multi-user.target plymouth-quit-wait.service session-c2.scope display-manager-failure.service systemd-ask-password-wall.service session-c1.scope [email protected] shutdown.target [email protected] user-983.slice user-1000.slice plymouth-quit.service
After=system.slice systemd-journald.socket remote-fs.target network.target systemd-journal-flush.service sysinit.target nss-user-lookup.target basic.target

bug跟踪器和上面的信息似乎表明问题实际上是由于启动失败造成的systemd-用户会话.service守护进程。

这实际上是我的情况发生的情况,因此以下解决方法暂时纠正了禁止登录的情况:

$ sudo systemctl start systemd-user-sessions.service

执行此操作后,/运行/不登录文件不再存在,并且可以从另一系统进行 SSH。但请注意,这并不可靠,因为有时用户无权访问受影响系统的控制台。

答案4

在 /etc/ssh/sshd_config 中将 UsePAM 设置为 no

UsePAM no

相关内容