如何设置ssh的时间长度和重定向错误信息

如何设置ssh的时间长度和重定向错误信息

我有一个主机列表,里面有几台主机。我想使用 ssh 连接到它们。我想通过 ssh 所花的时间长度来查看主机是否可用。如果花费的时间超过 5 秒(这意味着它不可用)。然后停止它,然后 ssh 到下一个主机。一旦主机可用,则输出主机名称。我以前使用 nmap,但 IT 安全人员告诉我不允许在校园桌面上安装它。

HOSTS=`cat $host_list`
for line in $HOSTS
do 
ssh -o ConnectTimeout=5s $line true >> /dev/null
RESULT=$?
if [ $RESULT -eq 0 ]
then
echo $line > succeed.txt
else
echo $line > fail.txt
fi
done

上面的脚本就是我所能做的一切。问题是当它失败时,我想重定向错误消息 ssh: connect to host c28-0112-05.ad.mtu.edu port 22: No route to host。但我仍然收到错误消息。

答案1

足够接近:

timeout -5s "ssh $line true"

那是:

  1. 使用正确的引号。timeout `ssh …`在这里不可能起作用,因为它的意思是“运行‘ssh’,捕获其输出,然后将输出设置为‘超时’。”

  2. 以“批处理”模式运行 ssh,即给它一个运行命令。如果没有它,ssh 将以交互模式运行,即使连接成功,也会永远挂起。

您还可以尝试:

ssh -o ConnectTimeout=5s $line true

答案2

ssh 有一个-o开关,它允许你提供额外的选项。这里特别有用的是选项ConnectTimeout,它接受以秒为单位指定的参数:

ssh -o ConnectTimeout=5 123.123.123.123

此外,ConnectionAttempts也可能对您有用。

相关内容