如何設定ssh的時間長度和重定向錯誤訊息

如何設定ssh的時間長度和重定向錯誤訊息

我有一個主機列表,有幾個主機。我想使用 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"

那是:

  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可能對您也有用。

相關內容