【问题标题】:SSH always exits with code 0. How to check if connection succeeded?SSH 总是以代码 0 退出。如何检查连接是否成功?
【发布时间】:2017-06-12 06:40:23
【问题描述】:

我正在尝试检查 SSH 连接是否成功(在运行脚本时)。

我正在尝试使用来自here 的答案,但不成功的连接返回错误代码0。

$ ssh -q user@downhost exit
$ echo $?
0

我尝试了各种无效的ssh 命令,但它们都返回0 返回码;使检查失败变得困难。

我觉得我一定做错了什么,但无法解决。有没有我改变了一些设置?

我正在运行 CentOS 7,使用以下 SSH 版本:

$ ssh -V
OpenSSH_6.6.1p1, OpenSSL 1.0.1e-fips 11 Feb 2013

【问题讨论】:

  • 您是否尝试过其他答案,例如运行 ssh -o BatchMode=yes -o ConnectTimeout=5 user@host echo ok 2>&1 ?这将在成功登录时ok
  • ssh -q user@downhost exit 为什么你认为这个命令会失败?您是否理解在另一个问题中,“downhost”应该代表当时无法访问的主机?
  • @Inian,我可能会从那个答案中破解一些东西(也许在子shell中运行?),但我希望这是if语句的条件,所以返回码似乎看的地方。
  • @Kenster。我已经尝试使用无法联系的 IP 地址、不存在的主机名和主机密钥检查失败的主机名。我仍然感到困惑。我原以为命令会失败,除非它成功连接。

标签: ssh sh


【解决方案1】:

我仍然对示例失败的原因感到困惑,但以下内容似乎对我有用。

can_connect_ssh()
{
    HOST=$1
    ssh -q -o BatchMode=yes -o ConnectTimeout=5 $HOST echo connection_success | \
       grep connection_success &> /dev/null
}

称为:

if can_connect_ssh <hostname>; then
    echo "Successful Connection"
else
    echo "Failed Connection"
fi

【讨论】:

  • 我很怀疑这对你有用。我认为您的意思是从 can_connect_ssh 中省略 return 关键字。
猜你喜欢
  • 2017-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-07
相关资源
最近更新 更多