如何判断 sshd 何时准备好连接?

如何判断 sshd 何时准备好连接?

我使用 bash 脚本重新启动远程服务器,然后通过 SSH 登录来运行一些命令。我的脚本大部分时间都有效,但偶尔会失败并出现以下错误:

“系统正在启动。尚未允许非特权用户登录。请稍后再回来。有关技术详细信息,请参阅 pam_nologin(8)。”

如果我等待几秒钟然后重试,效果很好。我目前正在检查连接情况,如下所示:

while ! nc -z $HOST 22; do
  sleep 1
done

ssh $HOST '/opt/my script..sh'

有没有更好的方法来测试连接以确保 sshd 真正准备好连接?

答案1

如果您想测试 ssh 是否已准备好接受连接并运行命令,请使用ssh,而不是其他类似 的内容nc。例如:

while ! ssh $HOST true; do
  sleep 1
done

仅当 (a) 您能够成功连接到远程主机并且 (b) 运行该true命令时,才会成功返回。

答案2

如果您不需要提前root登录,那么您可以简单地延迟 的开始sshd

将其添加到 SSH 服务单元:

After=systemd-user-sessions.service

sshd仅当允许非特权用户登录时才会启动。

这不允许较早的 SSH 登录。它只是将 SSH 状态从三种减少到两种:如果您可以与它交谈,那么您也可以登录。

相关内容