ssh tuneel,将端口转发到我的通配符域名

ssh tuneel,将端口转发到我的通配符域名

你好,我在我的家庭服务器中托管 Web 服务器,我想在全球范围内访问它,所以我的想法是设置 ssh 隧道,设置如下,我的家庭服务器在端口 :8080 上有 Web 服务器,在我的远程服务器上,可以在全球范围内访问的是 stream.domain.dn,它是一个通配符域,我想将它托管在那里,或者将它转发到那里,我的 apache 服务器设置如下

<VirtualHost *:80>
        ServerName stream.domain.dn
        ServerAlias www.stream.domain.dn
        DocumentRoot /www/test1
        RewriteEngine on
        RewriteCond %{SERVER_NAME} =www.stream.domain.dn [OR]
        RewriteCond %{SERVER_NAME} =stream.domain.dn
        RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

到目前为止,它托管了 .html 网站以测试 SSL 证书,并且运行良好,我该如何设置 apache 以让它在这里托管我的 ssh 隧道?我试过 ssh -L 80:localhost:8080 -N picaica@the-ip-of-mu-server,但总是出现错误

bind [127.0.0.1]:80: Permission denied
channel_setup_fwd_listener_tcpip: cannot listen to port: 80

所以我不知道该怎么做,是的,我正在使用 bind 作为名称解析,使用 ssh tunel 的最佳方法是什么?

答案1

似乎您混淆了转发选项中的顺序。错误消息是由于 SSH 客户端尝试侦听端口 80 而导致的。由于这是特权端口 (<1024),并且您可能没有以 root 身份运行 ssh 客户端并且没有 CAP_NET_BIND_SERVICE 功能,因此不允许您侦听此端口。

TCP 情况下转发选项的格式为:

-L [<local IP>:]<local port>:<remote IP or host name>:<remote port>

SSH 客户机将在本地监听local port,并且 SSH 服务器将连接到remote IP:remote port

要将本地端口 8080 转发为远程端口 80,您需要使用以下命令

ssh user@remote -L 1234:localhost:80

然后,连接到本地端口 8080(例如,在运行 SSH 客户端的地方运行浏览器并将其指向http://localhost:1234)最终将与 上的端口 80 进行通信remote,您的真实 Web 服务器正在该端口上运行。


或者,您可以使用撤销转发。使用方法如下:

-R [<remote IP>:]<remote port>:<local IP>:<local port>

在这种情况下,SSH 服务器将监听,remote IP:remote port而 SSH 客户端将连接到local IP:local port。(要监听远程非本地主机 IP,您需要在 SSH 服务器配置中启用非本地绑定。)

例如来自网络服务器您连接:

ssh user@remote -R 1324:localhost:80

然后在遥控器上您运行浏览器并将其指向http://localhost:1234,它最终将连接到 Web 服务器正在监听的本地端口 80。

相关内容