通过多跳 ssh 进行 HTTP

通过多跳 ssh 进行 HTTP

我可以通过多跳 ssh 访问 Linux 服务器

ssh -L3880:localhost:3880 user@first-hop-server -t ssh -L3880:localhost:3880 user@end-server

通过 ssh 进行访问没有问题。但是,我还想使用 Web 浏览器访问终端服务器端口 80 上的 Apache Web 服务器。

我找到了无需跳转的解决方案,但我不知道如何适应它。我在 MacOS 机器上

编辑:如果我尝试 Tero 建议并在 ssh 上激活 -v,我或多或少会看到:

debug1: Connection to port 3880 forwarding to localhost port 3880 requested.
debug1: channel 3: new [direct-tcpip]
debug1: Connection to port 3880 forwarding to localhost port 3880 requested.
debug1: channel 2: new [direct-tcpip]
channel 2: open failed: connect failed: Connection refused
debug1: channel 2: free: direct-tcpip: listening port 3880 for localhost port 3880, 
connect from 127.0.0.1 port 38535, nchannels 3
debug1: Connection to port 3880 forwarding to localhost port 3880 requested.
debug1: channel 4: new [direct-tcpip]

(它在不同的频道/端口上进行,但均被拒绝)

答案1

由于一个 Apache 主机可以托管多个域,因此您需要确保您的浏览器Host在建立 HTTP 连接时发送标头,或者在建立 HTTPS 时发送相应的 TLS 标头。

为了实现这一点,您需要编辑文件/etc/hosts以使其包含:

127.0.0.1 example.com

example.com您想要访问的域名在哪里。

http://domain.com:port之后,您可以像上面一样创建一个 SSH 隧道,然后在浏览器中打开网站。

编辑:您需要将最后转发到服务器的 HTTP 端口 80 或 HTTPS 端口 443。

答案2

我修改了使用端口 80 上的第二个隧道

ssh -L3880:localhost:3880 user@first-hop-server -t ssh -L3880:localhost:80 user@end-server

所以我理解,本地端口:3880->第一跳:3880,从第一跳开始,另一条隧道将端口 3880 连接到 Web 服务器端口 80

使用 Tero 的建议,我现在可以打开网站http://domain.com:3880 在 /etc/hosts 中定义 127.0.0.1 domain.com

答案3

最好的解决办法是跳转代理

ssh -N -A -J user1@host1 -D 8123 user2@host2

然后你就可以SOCKS在本地使用127.0.0.1:8123

相关内容