
我有一個主機列表,有幾個主機。我想使用 ssh 連接到他們。我想透過 ssh 花費的時間來查看主機是否可用。如果時間超過5s(說明不可用)。然後停止它,並 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"
那是:
使用正確的引號。
timeout `ssh …`
在這裡不可能工作,因為它意味著“運行'ssh',捕獲其輸出,然後將輸出設定為“超時”。以「批次」模式執行 ssh,即給它一個運行命令。如果沒有它,ssh 將以交互模式運行,並且即使連接成功也會永遠掛起。
您也可以嘗試:
ssh -o ConnectTimeout=5s $line true
答案2
ssh 有-o
開關,它允許您提供額外的選項。這裡特別有用的是該ConnectTimeout
選項,它需要以秒為單位指定的爭論:
ssh -o ConnectTimeout=5 123.123.123.123
此外,ConnectionAttempts
可能對您也有用。