如何使SSH命令执行超时

我有一个这样的程序:

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

在上面的代码中,我试图SSH到远程服务器,并尝试检查是否可以连接或不。 我有几个服务器,这是密码less被激活,less数服务器的密码仍然没有停用。 所以,我担心,如果有密码,它会卡在同一个屏幕上要求input密码,并且在无限期的时间内,无需退出逻辑。

问题:如何为上述代码实现定时器,如果它保持在同一个屏幕上询问密码。 并退出一些错误代码

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

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

除上述以外是否还有其他错误代码?

Solutions Collecting From Web of "如何使SSH命令执行超时"

您可以使用timeout命令将呼叫打包为ssh 。 如果发生超时,则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 

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

这听起来像问题是一次询问对多个主机的“批处理模式”处理(例如,在循环中)。 如果没有为给定主机配置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手册页,看看是否支持这些选项( BatchModeConnectTimeout )。