我有这样一个程序:
ssh -q harigm@8.19.71.238 exit
echo "output value -->$?"
在上面的代码,我想SSH到远程服务器,并尝试检查,如果我可以连接与否。 我有几台服务器,这是密码较少被激活,几台服务器用于其密码仍然尚未取消激活。 所以我的关注,如果有密码,它会卡死在同一个屏幕,要求输入密码,这将是有无限的时间,没有退出的逻辑。
问:如何实现上面的代码的计时器,如果它停留在相同的屏幕,要求输入密码。 并与一些错误代码退出
2)当我执行上面的代码,我得到以下错误代码:
127 -- > I guess its for success
225 -- > for any error.
是否有任何其他的错误代码除上述以外的?
你可以换调用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
这将不允许交互式密码验证。 然后你必须检查退出代码。
这听起来像的问题是询问针对许多主机“批处理模式”处理一次(例如,在一个循环中)。 下面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
手册页,看看这些选项( BatchMode
, ConnectTimeout
)的支持,虽然。