OpenSSHの最近のバージョンでリバーストンネルを作成する場合、使用可能なポートをバインドするために0のリモートポートを指定できます。
-R [bind_address:] port:host:hostport
...
port引数が「0」の場合、リスンポートはサーバー上で動的に割り当てられ、実行時にクライアントに報告されます。
openssh sshクライアントのマンページ
私の質問は、サーバー上のこのポート割り当てを(自動化された方法で)決定する方法です。sshクライアントを実行しているホストに報告されているが、このポートに接続してクライアントのサービスにアクセスしたいターゲットには報告されていないように思われます。
私が考えることができる2つの類似したオプションは、実行中です
# netstat -ntlp
サーバー上で、sshdによって127.0.0.1にバインドされている疑わしいポートを探すか、または
# lsof -p $PPID | grep TCP | grep LISTEN
ただし、自動化の観点からはこれらはどちらも快適ではありません。また、このようなトンネルが複数作成された場合、動的ポートを元のサービスポートに戻す方法はありません。
SSH_CONNECTION環境変数と同等のように、アクティブトンネルの場合、sshdサーバー側でアクティブトンネル(ローカルポート番号とリモートポート番号の両方)のリストを効果的に取得するために不足しているものはありますか?
一部のコンテキストでは、ホストへの非常に多くの同時逆トンネルを作成し、多くの異なるホスト上の同じポート番号にトンネリングして戻そうとしています。TCPスタックでポートプールを自動的に管理することが、これを行う最も効果的な方法のようです。