「ハートビート」を実行するためにssh接続を使用するシェルスクリプトをコーディングしようとしています。特定のタイムアウト後(接続が切断された後)に、その接続のクライアント側とサーバー側を終了したいと思います。
これまでに見つけたもの:
「ClientAliveCountMax」を変更するには、各ターゲットマシンのsshd_configを変更する必要があります(このオプションはデフォルトで無効になっています)。
だから私の質問は-私の目的にも「TCPKeepAlive」を使用できますか(ソース/ターゲットマシンで他に何も変更せずに)?
対象のオペレーティングシステムはSLES11 SP2ですが、ここでは関係ないと思います。
これには、おそらくServerAlive設定を使用する必要があります。サーバーでの設定は必要なく、必要に応じてコマンドラインで設定できます。
ssh -o ServerAliveInterval=5 -o ServerAliveCountMax=1 $Host
これにより、5秒ごとにsshキープアライブメッセージが送信されます。次のキープアライブを送信する時間になっても、最後のキープアライブへの応答が受信されなかった場合、接続は終了します。
ServerAliveInterval
とTCPKeepAlive
の重要な違いは、操作するレイヤーです。
TCPKeepAlive
はTCPレイヤー上で動作します。空のTCP ACKパケットを送信します。これらのパケットを無視するようにファイアウォールを設定できます。アイドル接続をドロップするファイアウォールを通過すると、接続が維持されない可能性があります。ServerAliveInterval
はsshレイヤーで動作します。実際にはsshを介してデータを送信するため、TCPパケットにはデータが暗号化されており、ファイアウォールはキープアライブか正当なパケットかを判別できないため、これらのパケットはより適切に機能します。TCPKeepAlive
オプションは実際には、ClientAliveのようなオプションまたはServerAliveのようなオプションから接続を存続させる非常に異なる方法です。
BSD SSHマニュアルページ に基づいています。
クライアントアライブメッセージは暗号化されたチャネルを介して送信されるため、なりすましはできません。
TCPKeepAlive
によって有効にされるTCPキープアライブオプションはスプーフィング可能です。クライアントアライブメカニズムは、クライアントまたはサーバーが接続がいつ非アクティブになったかを知ることに依存している場合に役立ちます。
TCPKeepAlive
は、システムがTCPキープアライブメッセージを反対側に送信する必要があるかどうかを確認します。デフォルトのオプションは常に有効です。
ClientAliveInterval
を使用している場合は、TCPKeepAlive
を無効にできます。このオプションは、暗号化されたチャネルを介してメッセージを送信し、クライアントからの応答を要求します(デフォルトは0なので、メッセージはクライアントに送信されません)。ClientAliveCountMax
は、sshdが切断するまでのクライアントアライブメッセージの数を設定しますセッションを終了することにより、クライアント。