如何将转发的本地端口绑定到 0.0.0.0 而不是 127.0.0.1?使用 GatewayPorts=yes 时“不允许操作”

如何将转发的本地端口绑定到 0.0.0.0 而不是 127.0.0.1?使用 GatewayPorts=yes 时“不允许操作”

(远程)SSH 服务器remote在(远程)127.0.0.1 端口 20001 上运行服务。我想通过 SSH 端口转发在本地提供此服务:

ssh -vvv -4 -L 20001:127.0.0.1:20001 remote

使用此命令可以很好地进行端口转发和访问服务。

但是,隧道绑定到我的本地计算机上的 127.0.0.1,因此只能在运行 SSH 命令的本地计算机上访问远程服务。我希望隧道绑定到 0.0.0.0,以便通过连接到本地计算机端口 20001,在我的本地 LAN 中可以使用远程服务。

该选项的联机帮助页-L提到:

默认情况下,本地端口根据 GatewayPorts 设置进行绑定。然而,可以使用显式的bind_address 将连接绑定到特定地址。 “localhost”的bind_address 表示侦听端口仅限本地使用,而空地址或“*”表示该端口应可从所有接口使用。

来源:https://manpages.debian.org/bookworm/openssh-client/ssh.1.en.html#L

所以我添加了GatewayPorts=yes设置并尝试了两者

ssh -vvv -4 -o GatewayPorts=yes -L 20001:127.0.0.1:20001 remote

ssh -vvv -4 -o GatewayPorts=yes -L *:20001:127.0.0.1:20001 remote

但我收到以下错误:

debug1: Local connections to *:20001 forwarded to remote address 127.0.0.1:20001
debug3: channel_setup_fwd_listener_tcpip: type 2 wildcard 1 addr NULL
debug1: Local forwarding listening on 0.0.0.0 port 20001.
listen: Operation not permitted
listen [0.0.0.0]:20001: Operation not permitted
channel_setup_fwd_listener_tcpip: cannot listen to port: 20001
Could not request local forwarding.

如何将转发的本地端口绑定到 0.0.0.0 而不是 127.0.0.1?错误从何而来?

  • 当绑定到127.0.0.1时,该端口可用。尽管如此,我还是仔细检查了netstat该端口未被使用。
  • 它对运行 SSH 命令没有帮助sudo
  • 我假设只有当您想在远程端使用绑定 0.0.0.0 的远程端口转发时才需要在服务器上进行GatewayPorts=yes设置。sshd_config无论如何,我更改了服务器配置,重新启动了服务器,正如预期的那样,这对我用于本地端口转发的 SSH 命令没有影响。

相关内容