使用ssh+socat进行远程端口转发,无需ssh -R隧道

使用ssh+socat进行远程端口转发,无需ssh -R隧道

我知道我可以使用 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

相关内容