9

我有一个这样的程序:

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

在上面的代码中,我尝试通过 SSH 连接到远程服务器,并尝试检查是否可以连接。我的服务器很少,即已激活无密码的服务器,也很少有尚未停用密码的服务器。所以我担心,如果有密码,它会卡在要求密码的同一个屏幕上,并且会在那里无限时间,没有退出逻辑。

问题:如何实现上述代码的计时器,以及它是否停留在要求密码的同一屏幕中。并退出一些错误代码

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

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

除了上述之外,还有其他错误代码吗?

4

2 回答 2

16

您可以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

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

于 2013-04-03T11:25:30.030 回答
2

听起来这个问题是在询问一次针对多个主机的“批处理模式”处理(例如,在循环中)。如果未为给定主机配置 PKA,则以下ssh命令将简单地失败(公钥身份验证 - 提到原始问题的“无密码”登录),因此它适用于您只想继续运行而不考虑问题的脚本连接到一台或两台主机。它也不会打扰所有关于“您确定要继续连接”到以前未知主机的查询(或者您可以为此添加)。例如,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手册页以查看是否支持这些选项(BatchMode, ConnectTimeout)。

于 2013-07-10T09:01:48.897 回答