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