我不是服务器管理员,但由于我正在编写一些 Facebook Connect 程序,我需要一个端口 80 上的公开 URL 来转发到我的本地开发环境。因此,我有一个基于 Centos 的 Web 服务器,并且我已停止 httpd(和 nginx)服务,但当我尝试从端口 80 建立 SSH 隧道时,它不起作用。据我所知,它在任何其他端口上都可以工作。
这基本上是我正在运行的命令:
ssh -v -p 22 -nNT4 -R *:80:localhost:3000 username@http://myurl.com
端口 80 是否以某种方式绑定在服务器上?我必须释放它吗?我查看了一下,发现它可能与我的 sshd_config 中的 GatewayPorts 设置有关 - 目前设置为“是”。
提前感谢任何建议!
卡梅伦
答案1
作为普通(非 root)用户,您不能绑定到 <1024 的端口。
答案2
使用“netstat -lnp|grep ":80" 查看是否有任何东西在监听端口 80。
正如 Bill Weiss 提到的,您需要以 root 身份通过 ssh 连接到远程计算机,以便您有权限绑定到 1024 以下的端口。
此外,您需要在面向公众的服务器上的 sshd_config 中启用 GatewayPorts。否则,sshd 将只允许它绑定到环回地址。
GatewayPorts 指定是否允许远程主机连接到为客户端转发的端口。默认情况下,sshd 将远程端口转发绑定到环回地址。这可防止其他远程主机连接到转发端口。GatewayPorts 可用于指定 sshd 应允许远程端口转发绑定到非环回地址,从而允许其他主机连接。参数可以是
no'' to force remote port forward- ings to be available to the local host only,
yes'',以强制远程端口转发绑定到通配符地址,也可以是clientspecified'' to allow the client to select the address to which the forwarding is bound. The default is
no''。
还, 'http://www.myurl.com/' 在您的示例中也应该只是主机名(不带 http://)
答案3
您可以运行 nc -l 80 吗?如果有其他程序使用该端口,您应该会收到“nc:地址已在使用中”