bash - 如何等到 ssh 可用?
问题描述
我正在尝试编写一个脚本,该脚本将等待服务器启动并检查 ssh 是否正在运行。
#!/bin/bash
until [ $(ssh -o BatchMode=yes -o ConnectTimeout=5 root@HOST echo ok 2>&1) = "ok" ]; do
echo "Trying again..."
done
echo "SSH is running"
如果服务器断电,我会收到此错误:
test3: ligne 3 : [: Too many arguments
Trying again...
^C
如果服务器正在运行它输出:
ok
解决方案
简单的解决方法是在可能出现空的字符串周围加上双引号。
until [ "$(ssh ...)" = "ok" ]; do ...
仅 Bash 测试[[
更宽容,因此您可以使用[[
...]]
而不是[
...]
而不必添加引号。
...但更好的解决方案是从以下位置查找退出状态ssh
:
until ssh ...; do ...
如果您希望操作静默,请添加重定向。
until ssh user@hostname true >/dev/null 2>&1; do ...
当然,还有您想要的任何其他选项。ssh -t
例如,如果它抱怨未连接到 TTY,您可能需要添加一个或多个选项。