SSH -L 本地端口转发与 localhost 指向错误页面

SSH -L 本地端口转发与 localhost 指向错误页面

抱歉,如果我的问题很愚蠢,但我不明白两件事。假设我正在做以下例子这里

[...] 您想从笔记本电脑连接到http://www.ubuntuforumsorg。您将使用源端口号 8080(备用 http 端口)、目标端口 80(http 端口)和目标服务器 www.ubuntuforums.org。:

ssh -L 8080:www.ubuntuforums.org:80 <host>

其中<host>应替换为您的笔记本电脑的名称。

问题 1:我实际上可以用它实现什么?在远程服务器上,没有可用的 sshd,因此流量使我的 PC 未加密,对吗?我需要它做什么?

Q2:我尝试执行 ssh -L 4444:linuxpl.com:80 localhost。当我输入http://本地主机:4444在我的 Web 浏览器中,我可以看到 LiteSpeed Web Server 的内部站点。当我尝试其他页面时,我可以看到 Apache 内部站点。当我尝试其他一些页面时,我可以看到此站点的 404 页面未找到消息。不过,其中一些工作正常。为什么会发生这种情况?如何解决?

答案1

Q1:你不会想这么做的。这个页面的措辞很愚蠢。正如你所说,流量会以加密方式从你的计算机传输到你的计算机,然后完全解密传输到论坛网站。他们本可以用另一台计算机来解释这一点,例如绕过防火墙。

教程的意思是“你想连接到论坛通过将您的笔记本电脑与另一台机器连接起来”,这样就更有意义了。

Q2:如果你打开http://本地主机:4444/在您的机器上,它将向论坛发出 HTTP 请求,但它会告诉论坛您想要主机localhost,而不是linuxpl.com。然后服务器可能会返回默认页面,而不是您想要的实际虚拟主机,因为它使用虚拟主机并且localhost不映射到与 相同的站点linuxpl.com

总而言之,通过 ssh 隧道转发 HTTP 流量通常不太容易。转发到某个代理会更好。

要让浏览器发送正确的标头,您可以通过设置 hosts 文件来声明目标地址是您的计算机来成功。这样,当浏览器解析地址时,它将连接到您的本地计算机,并仍然告诉 HTTP 服务器正确的主机名。

您可以通过添加行来尝试此操作

127.0.0.1        linuxpl.com

到 /etc/hosts

答案2

Q1:我在一个无法连接互联网的环境中使用它。想象一下,你在一个不允许连接到外界的网络中运行笔记本电脑,但有一台机器被允许连接到外界和你的笔记本电脑所在的网络。因此,为了能够浏览,你需要对这台机器进行 shh,这样你的互联网流量就会通过授权的机器进入外部网络。

连接过程如下:当你输入http://本地主机:4444ssh 将接收请求,并将其发送到主机,然后主机将其发送到 linuxpl.com:80。您的笔记本电脑和主机之间的连接由 ssh 加密,主机和互联网之间的连接未加密,即 ssh 仅在您的两台机器之间转发和加密消息。

Q2:不太明白问题是什么,但是 ssh -L 4444:linuxpl.com:80 localhost 实际上没有意义……因为你在你的机器和你的机器之间建立隧道……

相关内容