複数のコンピュータのうち、プライマリコンピュータで構成されているコンピュータを確認する方法

複数のコンピュータのうち、プライマリコンピュータで構成されているコンピュータを確認する方法

私たちは、コンピュータセットの1つだけが「ライブ」コンピュータで構成され、残りはフェイルオーバーコンピュータである古いシステムを使用しました。私たちはPingを使ってどちらが何であるかを決めましたが、セキュリティ更新プログラムはPingの役に立たなくなりました。

私はsshがまだ利用可能であることを知り、本質的にsshを使用して同じことをすることができますが、sshにはpingと同じタイムアウトオプションがあることがわかりません(私たちの環境では1秒のタイムアウトを使用します)。 ssh(uname実行)を使用するようにスクリプトを変更し、タイムアウトオプションがなく、スクリプトが再構成されたシステムに到達するとsshが長時間停止することを除いて、プロセスは機能します。

SSH接続のタイムアウトを短く設定する方法はありますか?それとも1〜2秒後に接続を終了する別の方法を見つけることができますか?もちろん、ホスト名に応答するシステムがあるのか​​、ホスト名に応答するシステムがないのかをすばやく確認する方法がある場合は知りたいです。

ありがとう

答え1

はい、このオプションを使用できますConnectTimeout。からman ssh_config

ConnectTimeout:デフォルトのシステムTCPタイムアウトを使用する代わりに、SSHサーバーに接続するときに使用するタイムアウトを秒単位で指定します。この値は、ターゲットが接続を拒否した場合ではなく、ターゲットがダウンしているか実際に接続できない場合にのみ使用されます。

したがって、5秒タイムアウトの場合:

ssh -o ConnectTimeout=5 host true

これは素早く接続された状況を処理しませんが、接続しているコンピュータと接続しているコンピュータの両方で実行される実際のコマンドは遅くなります。 GNU coreutilsのタイムアウトが長いバイナリをバックアップとして使用して、このConnectTimeout状況を処理できますtimeout

たとえば、これは5秒以上かかる接続をタイムアウトし、ジョブ全体のいずれかが7秒以上かかる場合(送信を介して)終了しますSIGTERM。 3秒後にsshまだシャットダウンがない場合は、以下を送信してくださいSIGKILL

timeout 7 -k 3 ssh -o ConnectTimeout=5 host true

これを使用するかtimeoutどうかは、達成したい目標によって異なりますが、少なくとも早く失敗する可能性があります。

関連情報