首页 > 解决方案 > 如何等到 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

标签: bashshellssh

解决方案


简单的解决方法是在可能出现空的字符串周围加上双引号。

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

仅 Bash 测试[[更宽容,因此您可以使用[[...]]而不是[...]而不必添加引号。

...但更好的解决方案是从以下位置查找退出状态ssh

until ssh ...; do ...

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

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

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


推荐阅读