次のように、SSHのリモートポートトンネルを使用してリモートホストとローカルホスト間の接続を作成できることを理解しています。
ssh -fN user@remote -R remote_port:localhost:local_port
明示的な-Rなしで上記のタスクを実行したいと思います。たとえば...
ssh -f user@remote "script.sh ${local_port}"
その中で、script.shは以下のようにポート転送のためにsocatを呼び出します。
socat TCP-LISTEN:<some_port_determined_in_script>,fork,reuseaddr TCP:ssh_client:ssh_client_port
しかし、これはうまくいきません。私は何を逃したことがありませんか?
デフォルトでは、クライアントにクライアントポートのみを決定し、リモコンに使用するポートを決定させたいと思います。
答え1
-Rオプションを使用しないと、すべてのデータは他の接続(Socat分岐)に関係なく通常のSSHチャネルを通過します。したがって、最初の例のように、-Rオプションを使用し、次のようにリモートローカルホストでのみSocat転送ポートを使用することをお勧めします。
socat TCP-LISTEN:<some_port_determined_in_script>,fork,reuseaddr TCP:localhost:remote_port