我正在执行一项任务,需要检查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
嗯,如果您使用的是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
。
希望这会有所帮助