将远程 tcp 端口转发到本地端口

将远程 tcp 端口转发到本地端口



我有以下设置: 设置图

该设备不断尝试连接到特定已知端口上的远程服务器。
在远程服务器上,除了开放的 TCP 端口之外什么都没有。
我想将远程服务器的端口转发到我的电脑并打开 TCP 服务器来读取数据。

最终,我想使用Python来实现这一点,
但与此同时,我尝试使用ssh来执行此操作:ssh -N -R 10000:localhost:10000 username@hostname
在我这边(我的电脑),我尝试打开一个套接字(使用python)来监听端口10000,并尝试打开赫拉克勒斯模拟TCP服务器,但是,我没有收到任何数据。

显然,缺少了一些东西,那是什么?
ps 在远程服务器上打开 TCP 服务器将获取数据,
但我需要控制来自我的电脑的连接。

答案1

以下是相关部分-Rssh的手册页中

-R [bind_address:]port:host:hostport

[...]

默认情况下,服务器上的 TCP 监听套接字将仅绑定到环回接口。这可以通过指定bind_address来覆盖。一个空的bind_address,或者地址'*',表示远程套接字应侦听所有接口。GatewayPorts 仅当启用服务器选项时,指定远程绑定地址才会成功(请参阅sshd_config(5))。

远程服务器上的监听套接字仅监听本地主机因此来自 UNIT 的连接被拒绝(即:它是“关闭的”)。

因此,如果服务器已经允许,则只需使用它即可:

ssh -N -R :10000:localhost:10000 username@hostname

请注意:前面有“一个空的绑定地址”(也可以使用实际的远程服务器面向 UNIT 的 IP 地址)。这应该改进为:

ssh -o ExitOnForwardFailure=yes -N -R :10000:localhost:10000 username@hostname

以防止错误地运行两次。

但默认情况下通常不允许使用这种类型的绑定地址,远程服务器的sshd配置为GatewayPorts应该改变。在远程服务器上,配置文件通常/etc/ssh/sshd_config应修改为具有如下所示的(未注释的)条目:

GatewayPorts clientspecified

并且应该重新加载 ssh 守护进程以使用其新配置。

相关内容