如何在带有密码提示的bash脚本中检查路由器的SSH登录状态

问题描述 投票:-1回答:1

我正在执行一项任务,需要检查400台远程路由器上的SSH登录状态。我在bash中使用Expect编写了脚本,该脚本对远程路由器进行SSH并在其上运行一些命令。但是,有些路由器不响应SSH。我正在使用if语句来避免那些在SSH上失败的路由器。仅当我们输入的密码较少或已保存私钥时,用于检查远程路由器状态的示例代码才有效。您能帮我怎样检查远程路由器上的SSH状态?

如果在对路由器执行SSH时收到密码提示,则可以说服务器能够对路由器进行SSH。无需提供密码。

#!/bin/bash

ssh -q -o BatchMode=yes -o ConnectTimeout=7 username@IP exit
echo $?
if [ $? -ne 0 ]
then
  # Do stuff here if example.com SSH is down
  echo "Can not connect to the device"
fi

bash ssh expect
1个回答
0
投票

嗯,如果您使用的是expect软件包,那么那里也有超时选项。

除了上面的一些更正外,上面的shell代码是正确的方法:

#!/bin/bash

ssh -q -o BatchMode=yes -o ConnectTimeout=7 username@IP date
ret=$?
echo $ret
if [ $ret -ne 0 ]
then
  # Do stuff here if example.com SSH is down
  echo "Can not connect to the device"
fi

[您可以看到,我们正在将$?立即分配给变量。如果您不这样做,则$?将包含echo $?命令的返回值,该返回值将始终为0。因此,对于所有ssh,都为true。我也建议使用其他命令而不是使用ssh的exit

希望这会有所帮助

© www.soinside.com 2019 - 2024. All rights reserved.