SSHの時間の長さを設定し、エラーメッセージをリダイレクトする方法

SSHの時間の長さを設定し、エラーメッセージをリダイレクトする方法

ホストリストがあり、ホストが複数あります。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"

あれは:

  1. 正しい引用符を使用してください。timeout `ssh …`これは「'ssh'を実行し、その出力をキャプチャし、それから出力を「timeout」に渡します。

  2. ssh を「バッチ」モードで実行します。つまり、実行するコマンドを指定します。これがないと、ssh は対話モードで実行され、接続が成功しても永久にハングします。

次の方法も試すことができます:

ssh -o ConnectTimeout=5s $line true

答え2

ssh には-o、追加のオプションを指定できるスイッチがあります。ここで特に役立つのはConnectTimeout、秒数で指定された引数を取る オプションです。

ssh -o ConnectTimeout=5 123.123.123.123

さらに、ConnectionAttemptsあなたにとっても役立つかもしれません。

関連情報