SSHでtcp-keepaliveはどのように機能しますか?

SSHでtcp-keepaliveはどのように機能しますか?

「ハートビート」を実行するために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する階層です。

  • TCPKeepAliveTCP層で実行されます。空の TCP ACK パケットを送信します。これらのパケットを無視するようにファイアウォールを構成できるため、アイドル接続を破棄するファイアウォールを通過すると、これらのパケットが接続をアクティブに保つことができない可能性があります。
  • ServerAliveIntervalSSH層で実行されます。実際にはSSHを介してデータを送信するため、TCPパケットには暗号化されたデータが含まれており、ファイアウォールはそれがKeepaliveパケットであるか正当なパケットであるかを知ることができないため、これはうまく機能します。

おすすめ記事