![SSH 隧道抛出错误:bind [ip]:801: 无法分配请求的地址 channel_setup_fwd_listener_tcpip: 无法监听端口:801](https://linux22.com/image/784826/SSH%20%E9%9A%A7%E9%81%93%E6%8A%9B%E5%87%BA%E9%94%99%E8%AF%AF%EF%BC%9Abind%20%5Bip%5D%3A801%3A%20%E6%97%A0%E6%B3%95%E5%88%86%E9%85%8D%E8%AF%B7%E6%B1%82%E7%9A%84%E5%9C%B0%E5%9D%80%20channel_setup_fwd_listener_tcpip%3A%20%E6%97%A0%E6%B3%95%E7%9B%91%E5%90%AC%E7%AB%AF%E5%8F%A3%EF%BC%9A801.png)
如果我将端口从服务器转发到我的本地主机(我使用另一台虚拟机上的 apache 上的 Web 服务器作为转发服务器),那么一切都不会出现问题。
ssh -L 801:192.168.0.115:80 [email protected]
但当尝试授予其他网络成员访问权限时,会发生错误
ssh -L 192.168.0.115:801:192.168.0.115:80 [email protected]
bind [192.168.0.115]:801: Cannot assign requested address
channel_setup_fwd_listener_tcpip: cannot listen to port: 801 Could not request local forwarding.
当然,当我尝试访问端口 801 时,什么都没发生。我尝试使用大于 4000 的不同端口,当查看 netstat 时,没有端口被使用,我关闭了端口,但什么也没发生。
尝试使用反向 SSH 隧道时,没有给出任何错误,但也无法在虚拟机上打开 localhost:801
ssh -R 192.168.0.115:801:127.0.0.1:80 [email protected]
(仅限于建立隧道的 ssh 机器本身)
当尝试打开 SSH 调试器()时,它会输出以下内容:ssh -R 192.168.0.115:801:127.0.0.1:80 [email protected] -v
debug1: Remote: Forwarding listen address "192.168.0.115" overridden by server GatewayPorts
debug1: remote forward success for: listen 192.168.0.115:801, connect 127.0.0.1:80
debug1: Sending environment.
设置:已sshd_config
更改:
Gateway yes
AllowTcpForwarding yes
(在所有计算机上)
尝试连接 IPv4 时,结果没有改变()ssh -4 -L 0.0.0.0:801:192.168.0.115:80 [email protected]
最初错误的设置可能存在错误,但重置所有机器并从头开始安装时,什么都没有改变。
答案1
对于本地转发,您需要-g
在命令行上使用,或者启用GatewayPorts
(yes
默认no
,禁用).ssh/config
或/etc/ssh_config
允许监听非本地主机地址:
ssh -g -L 192.168.0.115:801:192.168.0.115:80 [email protected]
为了能够在进行远程转发时监听非本地主机 IP,您需要在远程服务器的 sshd_config 中启用它:设置GatewayPorts
为clientspecified
或yes
(默认no
,禁用)。请参阅sshd_config 命令。
请注意,不仅是“网关”,而且是“网关端口“。顺便说一句,您收到的扩展错误消息中提到,由于此限制性设置,反向转发被覆盖。请仔细阅读您的错误消息!
另请注意,端口 801 是特权。您无法以普通用户身份收听它。当执行 SSH 本地端口转发 ( -L
) 时,它受到客户端的约束;您需要承担该CAP_NET_BIND_SERVICE
功能,例如以 root 身份或在 下运行 ssh 客户端授权绑定或类似的东西。-R
但是,在执行 SSH 远程端口转发 ( ) 时,端口受 sshd 进程绑定后将权限交给经过身份验证的用户,这样用户就需要是 root 用户(即直接以 root 身份连接到 SSH,哎哟),或者 sshd 需要在远程上承担相同的功能(这又很麻烦)。下面是更多的有关 Linux 功能(还有进一步的链接)。
选择 1024 以上的端口号要容易得多,也更安全。
答案2
1.)
ssh -L 801:192.168.0.115:80 [email protected]
它在当前机器上创建了一个套接字127.0.0.1:801
。所有发往localhost:801
(来自本地机器)的邮件都将通过 发.115:80
往.113
。
这看起来不错。
2.) 我假设你在与上一个命令相同的机器上发出了此命令
ssh -L 192.168.0.115:801:192.168.0.115:80 [email protected]
这将尝试绑定到.115:801
本地机器,但该机器没有.115
地址(似乎..)
3.)
ssh -R 192.168.0.115:801:127.0.0.1:80 [email protected]
此命令想要.115:801
在服务器上远程创建一个套接字.113
。我假设.113
服务器没有.115
地址...
我认为您想做以下事情:
ssh -L your_local_ip:801:192.168.0.115:80 [email protected]
在这种情况下,所有可以联系到的人your_local_ip:801
都将被转发至.115:80
通过.113
。