ssh -Rトンネリングなしでリモートポート転送にssh + socatを使用する

ssh -Rトンネリングなしでリモートポート転送にssh + socatを使用する

次のように、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

関連情報