状況は次のとおりです。 Ubuntu Server 14.04を実行しているLinuxサーバーがあり、複数のコンピューターがサーバーに接続し、SSHを使用して認証した後、リバーストンネルを開こうとします。これらのコンピュータは通常、インターネット接続が非常に安定しておらず、時には再接続を試みますが、Linuxサーバーはまだ以前のセッションがまだ開いていると思います。その後、コンピュータはリバーストンネルを開くように要求しますが、Linuxサーバーはポートにバインドされている他のセッションがまだあるため、これを行うことはできません。
その後、コンピュータは5分待ってからやり直してください。同時に、サーバーはポートを解放し、2番目の試みは成功します。
これはうまくいきますが、私が望むのは、リバーストンネル要求が入っていてポートがすでに使用されている場合は、SSHデーモンが別のセッションを終了して新しいトンネルを受け入れることです。そのようなことは可能ですか?
これが可能であれば、SSHデーモンは、バインドされたプロセスが別のSSHセッションの場合にのみポートを解放する必要がありますが、これは他の方法(SSHDが特定のポートのみを転送できるようにするなど)で変更できます。
助けてくれてありがとう!
PSダイナミックポート番号はオプションではありません。
答え1
もしそうなら、リモートホストの新しい接続が別の接続を開始できるようにしますか?これにより、他のクライアントがリバーストンネルを積極的に使用するときに問題が発生する可能性があります。
以下を使用して、動的に選択されたポートを割り当てることができます。
ssh -R 0:localhost:xxx remotehost
ClientAliveInterval
別のオプションは、/etc/ssh/sshd_config
このディレクティブでこのディレクティブを使用することですClientAliveCountMax
。これらのディレクティブを使用すると、サーバーはクライアント接続が応答しないことを検出し、選択した値に応じて接続を閉じることができます。たとえば、
ClientAliveInterval 15
ClientAliveCountMax 3 #default value
応答しないクライアントは約45秒後に切断されます。
man sshd_config
詳細は参照してください。