「ハートビート」を実行するためにSSH接続を使用するシェルスクリプトを作成しようとしています。特定のタイムアウト後(接続が失われた後)、クライアントとサーバー側の接続を終了したいと思います。
これまで私が見つけたもの:
- TCP接続の維持はい/いいえSSHそしてSSHD
- 生きているクライアントの最大数~のためSSHD
- クライアントアクティビティ間隔~のためSSHD
- サーバーの最大アクティビティ数~のためSSH
- サーバー活動間隔~のためSSH
"ClientAliveCountMax"を変更するには、各ターゲットコンピュータでsshd_configを変更する必要がありました(このオプションはデフォルトでは無効になっています)。
だから私の質問は - "TCPKeepAlive"を使用して私の目的を達成することができますか?
対象OSはSLES11 SP2ですが、それとは関係ないと思います。
答え1
これにはServerAlive設定を使用できます。サーバーで構成する必要はなく、必要に応じてコマンドラインで設定できます。
ssh -o ServerAliveInterval=5 -o ServerAliveCountMax=1 $HOST
これにより、5秒ごとにSSH Keepaliveメッセージが送信されます。別のKeepaliveメッセージを送信する必要がありますが、最後のKeepaliveへの応答が受信されない場合、接続は終了します。
ServerAliveInterval
との主な違いは、機能TCPKeepAlive
する階層です。
TCPKeepAlive
TCP層で実行されます。空の TCP ACK パケットを送信します。これらのパケットを無視するようにファイアウォールを構成できるため、アイドル接続を破棄するファイアウォールを通過すると、これらのパケットが接続をアクティブに保つことができない可能性があります。ServerAliveInterval
SSH層で実行されます。実際にはSSHを介してデータを送信するため、TCPパケットには暗号化されたデータが含まれており、ファイアウォールはそれがKeepaliveパケットであるか正当なパケットであるかを知ることができないため、これはうまく機能します。
答え2
このTCPKeepAlive
オプションは、実際に ClientAlive や ServerAlive などのオプションとの接続を維持する非常に異なる方法です。
両方押してくださいBSD SSH マニュアルページ、私達は次を読むことができます:
クライアントアクティビティメッセージは、偽装できないように暗号化されたチャネルを介して送信されます。アクティブなTCP接続を維持するオプション
TCPKeepAlive
はなりすまし可能です。クライアント側のアクティブメカニズムは、クライアントまたはサーバーが接続が無効になるタイミングを知る必要がある場合に便利です。
TCPKeepAlive
システムが相手にTCPキープアライブメッセージを送信するかどうかを決定します。デフォルトオプションは常に有効です。
使用している場合はClientAliveInterval
無効にできますTCPKeepAlive
。このオプションは、暗号化されたチャネルを介してメッセージを送信してクライアントからの応答を要求し(デフォルトはゼロであるため、クライアントにメッセージが送信されません)、ClientAliveCountMax
sshdはセッションを終了してクライアントを切断する前にクライアントのアクティブメッセージ数を設定します。 。