
ホストリストがあり、ホストが複数あります。SSH を使用してそれらのホストに接続します。SSH にかかる時間の長さによって、ホストが使用可能かどうかを確認します。5 秒以上かかる場合 (つまり、使用できない)、SSH を停止し、次のホストに 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'を実行し、その出力をキャプチャし、それから出力を「timeout」に渡します。ssh を「バッチ」モードで実行します。つまり、実行するコマンドを指定します。これがないと、ssh は対話モードで実行され、接続が成功しても永久にハングします。
次の方法も試すことができます:
ssh -o ConnectTimeout=5s $line true
答え2
ssh には-o
、追加のオプションを指定できるスイッチがあります。ここで特に役立つのはConnectTimeout
、秒数で指定された引数を取る オプションです。
ssh -o ConnectTimeout=5 123.123.123.123
さらに、ConnectionAttempts
あなたにとっても役立つかもしれません。