ssh -R 仅在远程绑定到 127.0.0.1

Aux*_*rro 6 ssh ip ssh-tunnel loopback

我正在运行ssh -N -f -R127.0.2.3:23000:127.1.2.3:23000 user@remote,我希望远程上的隧道已在 上打开127.0.2.3:23000,但它只在 上打开127.0.0.1:23000,这很不方便,因为我需要在远程上打开多个隧道,但监听相同的 tcp 端口。

在本地机器中,隧道指向正确的 IP 地址 (127.1.2.3:23000)。

我尝试在远程创建几个环回设备,但无济于事。

Linux 和 Freebsd 服务器(openbsd-ssh)也是如此

那么,为什么 ssh -R 没有绑定到远程 127.0.0.1 以外的环回 IP?

谢谢你。

(抱歉编辑不好:)

A.B*_*A.B 9

虽然本地可选绑定地址是在SSH客户端进行的控制(与指定-L/LocalForward或与改变的-g/GatewayPorts客户端的配置),则远程客户端与指定的可选的绑定地址-R/RemoteForward是在SSH的控制服务器侧该服务器配置GatewayPorts。默认情况下它是no. 它应该设置为clientspecified允许客户端选择绑定到哪个地址:

GatewayPorts
指定是否允许远程主机连接到为客户端转发的端口。默认情况下,sshd(8) 将远程端口转发绑定到环回地址。这可以防止其他远程主机连接到转发端口。GatewayPorts可用于指定 sshd 应允许远程端口转发绑定到非环回地址,从而允许其他主机连接。参数可能是no强制远程端口转发仅对本地主机可用,yes强制远程端口转发绑定到通配符地址,或clientspecified允许客户端选择转发绑定到的地址。默认值为no.

此外,客户的RemoteForward条目同样说明:

[...]
如果没有指定 bind_address,默认是只绑定到环回地址。如果 bind_address 是 '*' 或空字符串,则请求转发以侦听所有接口。 指定远程 bind_address 只有在GatewayPorts启用服务器选项时才会成功 (请参阅 sshd_config(5))

因此,您必须能够更改服务器上 ssh 的服务器配置(通常具有 root 访问权限),并在sshd_config文件中添加(或编辑)此条目,因此它显示:

GatewayPorts clientspecified
Run Code Online (Sandbox Code Playgroud)

如果不能,您可以使用服务器端存在(或可本地安装)的其他可用工具来克服此(相当弱的)安全限制。例如socat,或者ssh通过使用LocalForward从服务器到自身的 a(即使它无用地添加了一层加密)。