「ハートビート」を実行するためにssh接続を使用するシェルスクリプトをコーディングしようとしています。特定のタイムアウト後(接続が切断された後)に、その接続のクライアント側とサーバー側を終了したい。
これまでに見つけたもの:
- TCPKeepAlive sshの場合はyes/no およびsshd
- ClientAliveCountMax sshdの場合
- ClientAliveInterval sshdの場合
- ServerAliveCountMax sshの場合
- ServerAliveInterval sshの場合
「ClientAliveCountMax」を変更するには、各ターゲットマシンのsshd_configを変更する必要があります(このオプションはデフォルトで無効になっています)。
ですから、私の質問は、「TCPKeepAlive」を自分の目的にも使用できますか(ソース/ターゲットマシンで他に何も変更せずに)?
ターゲットオペレーティングシステムはSLES11SP2ですが、ここでは関係ないと思います。
承認された回答:
これには、ServerAlive設定を使用することをお勧めします。サーバーでの構成は不要であり、必要に応じてコマンドラインで設定できます。
ssh -o ServerAliveInterval=5 -o ServerAliveCountMax=1 $HOST
これにより、5秒ごとにsshキープアライブメッセージが送信されます。別のキープアライブを送信するときに、最後のキープアライブへの応答が受信されなかった場合、接続は終了します。
ServerAliveInterval
の重要な違い およびTCPKeepAlive
は彼らが活動する層です。
-
TCPKeepAlive
TCP層で動作します。空のTCPACKパケットを送信します。ファイアウォールはこれらのパケットを無視するように構成できるため、アイドル状態の接続をドロップするファイアウォールを通過すると、接続が維持されない場合があります。 -
ServerAliveInterval
sshレイヤーで動作します。実際にはsshを介してデータを送信するため、TCPパケットには暗号化されたデータが含まれており、ファイアウォールはキープアライブか正当なパケットかを判断できないため、これらはより適切に機能します。