赫莉,
我有一个脚本,它会等待一段时间,直到一台机器(正在配置)启动,然后连接到 ssh 并执行某些操作。我为此使用了“睡眠”。
我想改变我的脚本以在 bash 循环中主动检查端口,并且当它准备就绪(sshd 已启动并接受连接)时它将继续。
怎么做?是否有 UNIX 命令可以告诉我 TCP 服务器端口是否响应?
答案1
为什么不直接调用ssh
?它会等待远程主机可用,一段时间后超时。如果发生错误,它会返回 255,这意味着您可以重试。
答案2
正如建议的那样https://stackoverflow.com/a/50055449/15820811, 您可以使用:
until printf "" 2>>/dev/null >>/dev/tcp/mysshserver.example.org/22; do sleep 1; done
这将每秒尝试将数据写入mysshserver.example.org
(替换为您的服务器) 上的端口 22(SSH 端口),直到数据可以成功写入。