お客様の場所にインストールするハードウェアがいくつかあります。そのハードウェアはsshサーバーに接続し、リバースSSHトンネルを確立して、監視目的で複数のクライアントシステムにアクセスできるようにします。
SSHセッションが不明瞭に切断されるまで、すべてが正常に機能します。
その場合、SSHサーバーでは、リバーストンネルで使用されていたポートがLISTENINGモードのままになり、リモートハードウェアが最終的に自動再接続してトンネルを再確立しようとすると、エラーで失敗します
警告:リッスンポートXXXXのリモートポート転送に失敗しました
私は、SSHサーバーまたはクライアントに問題がないかどうかをテストし、ポートを適切に解放するクリーンな切断とコースを試しました。接続障害をシミュレートした場合(クライアントハードウェアのイーサネットポートを切断した場合など)、上記で説明したのと同じ問題が発生します。
この状況を処理する適切な方法は何ですか?これらはリバーストンネルであるため、SSHサーバーで何をする必要があるかを覚えておいてください。理想的には、トンネルをホストしているSSHセッションがダウンしていることを即座に認識し、使用していたポートを解放するsshサーバーが必要です。ソリューションには関連するSSHプロセスの強制終了が含まれると思いますが、複数のクライアントが同じsshサーバーに接続しているため、オフラインにしたくないので注意が必要です。
成熟しているので、SSHDにはこれを処理するための組み込み機能があると思いますが、それを理解することはできません。
Windowsボックスの管理に戻る必要がないようにアドバイスしてください...
参考:私はこれをDebianベースのディストリビューションで実行しています。
sshd_config
でClientAliveInterval
を使用する必要があります。
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.