リバースsshトンネルが突然/クリーンに切断されたときにSSHサーバーのポートを解放する方法は?


19

お客様の場所にいくつかのハードウェアを設置し、そのハードウェアがsshサーバーに接続し、リバースsshトンネルを確立して、監視目的で複数のクライアントシステムにアクセスできるようにします。

SSHセッションが不明確に切断されるまで、すべて正常に動作します。

その場合、SSHサーバーでは、リバーストンネルで使用されたポートがリッスンモードのままになり、リモートハードウェアが最終的に自動再接続を試みてトンネルを再確立しようとすると、エラーで失敗します

警告:リスンポートXXXXのリモートポート転送に失敗しました

SSHサーバーまたはクライアントに問題があるかどうかをテストするために、クリーンな切断を試行し、ポートを正常に解放します。接続障害をシミュレートする場合(たとえば、クライアントハードウェアのイーサネットポートを切断する)、上記と同じ問題が発生します。

この状況を処理する適切な方法は何ですか?これらは逆トンネルであるため、SSHサーバーで何を行う必要があることに注意してください。理想的には、トンネルをホストしているSSHセッションがダウンしていることを即座に認識し、使用していたポートを解放するためにsshサーバーが必要です。解決策には関連するSSHプロセスを強制終了する必要があると思いますが、同じsshサーバーに複数のクライアントが接続しているため、それらをオフラインにしたくないので注意する必要があります。

成熟しているため、SSHDにはこれを処理するための何らかの機能が組み込まれているはずですが、それを理解することはできません。

Windowsボックスの管理に戻る必要がないようにアドバイスしてください...

参考:私はこれをDebianベースのディストリビューションで実行しています。

回答:


18

で使用する必要ClientAliveIntervalがありますsshd_config

ClientAliveInterval 15

参照:man sshd_config

ClientAliveCountMax
         Sets the number of client alive messages (see below) which may be
         sent without sshd(8) receiving any messages back from the client.
         If this threshold is reached while client alive messages are
         being sent, sshd will disconnect the client, terminating the
         session.  It is important to note that the use of client alive
         messages is very different from TCPKeepAlive (below).  The client
         alive messages are sent through the encrypted channel and
         therefore will not be spoofable.  The TCP keepalive option
         enabled by TCPKeepAlive is spoofable.  The client alive mechanism
         is valuable when the client or server depend on knowing when a
         connection has become inactive.

         The default value is 3.  If ClientAliveInterval (see below) is
         set to 15, and ClientAliveCountMax is left at the default,
         unresponsive SSH clients will be disconnected after approximately
         45 seconds.  This option applies to protocol version 2 only.

 ClientAliveInterval
         Sets a timeout interval in seconds after which if no data has
         been received from the client, sshd(8) will send a message
         through the encrypted channel to request a response from the
         client.  The default is 0, indicating that these messages will
         not be sent to the client.  This option applies to protocol
         version 2 only.

ありがとう、クレメント。私たちのサーバー上でそれを設定することを検討します。
TCZ 14

完了してテスト済みで、美しく機能します。どうもありがとうございました。
TCZ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.