如何使SSH命令执行超时(how to make SSH command execution to

2019-08-19 05:49发布

我有这样一个程序:

ssh -q harigm@8.19.71.238 exit
echo "output value  -->$?"

在上面的代码,我想SSH到远程服务器,并尝试检查,如果我可以连接与否。 我有几台服务器,这是密码较少被激活,几台服务器用于其密码仍然尚未取消激活。 所以我的关注,如果有密码,它会卡死在同一个屏幕,要求输入密码,这将是有无限的时间,没有退出的逻辑。

问:如何实现上面的代码的计时器,如果它停留在相同的屏幕,要求输入密码。 并与一些错误代码退出

2)当我执行上面的代码,我得到以下错误代码:

127 -- > I guess its for success
225 -- > for any error.

是否有任何其他的错误代码除上述以外的?

Answer 1:

你可以换调用ssh使用timeout命令。 的timeout命令代码124退出,如果发生超时。

timeout 10s ssh -q harigm@8.19.71.238 exit
if [ $? -eq 124 ]; then
    echo "Timeout out"
fi

或者,正如Vorsprung曾这样评价您的问题(因为我是仰视的男人页!):

ssh -oPasswordAuthentication=no -q harigm@8.19.71.238 exit

这将不允许交互式密码验证。 然后你必须检查退出代码。



Answer 2:

这听起来像的问题是询问针对许多主机“批处理模式”处理一次(例如,在一个循环中)。 下面ssh如果配置给定主机PKA命令会失败(公钥认证- “无密码”登录提到了原来的问题),所以这是很好的,你只是想继续运行脚本,无论连接到一个或两个主机的问题。 它也不会所有关于“你确定要继续连接”以前未知的主机(或者你可以添加查询打扰StrictHostKeyChecking no~/.ssh/config为)。 例如,

for host in host1 host2 host3  # etc
do
  ssh -o BatchMode=yes -o StrictHostKeyChecking=no -o ConnectTimeout=5 \
      user@$host  'uptime' || echo "problem: host=$host"
done

你必须检查你的(客户端) ssh手册页,看看这些选项( BatchModeConnectTimeout )的支持,虽然。



文章来源: how to make SSH command execution to timeout