如何等待ssh可用?

时间:2019-02-13 10:43:05

标签: bash shell 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

2 个答案:

答案 0 :(得分:1)

一个简单的解决方法是在字符串周围加上双引号,这可能会变成空。

until [ "$(ssh ...)" = "ok" ]; do ...

仅Bash的测试[[更具容错性,因此您可以使用[[ ... ]]代替[ ... ],然后不必添加引号。

...但是更好的解决方案是从ssh查找退出状态:

until ssh ...; do ...

如果您希望操作静音,请添加重定向。

until ssh user@hostname true >/dev/null 2>&1; do ...

当然还有您想要的任何其他选项。例如,如果它抱怨没有连接到TTY,则可能需要添加一个或多个ssh -t选项。

答案 1 :(得分:0)

您的ssh命令扩展为空,或扩展为多个单词;您应该引用它(并在脚本上运行Shellcheck):

until [ "$(ssh ... )" = ok ]; do