如何正确设置 ssh 隧道,以便您可以作为本地主机访问服务器上的站点

如何正确设置 ssh 隧道,以便您可以作为本地主机访问服务器上的站点

出于安全原因,我已将部分网站限制为仅供本地主机访问。为了访问它们,我将创建一个 ssh 隧道,如下所示 ssh -L 8080:localhost:80[电子邮件保护] 并将我电脑上的本地浏览器设置为代理 127.0.0.1:8080

好吧,我想我错过了一些东西,因为本地浏览器中没有加载任何内容,而在服务器端的终端上,每次我尝试在本地电脑上加载某些内容时,它都会显示通道 3:打开失败:连接失败:连接被拒绝

尝试此操作时防火墙已关闭

答案1

正如已经讨论过的,不会在客户端启动神奇的代理服务器,它只是将客户端端口 8080 转发到服务器端口 80。您需要让客户端 Web 浏览器连接到客户端端口 8080,正如其他人和我自己所说的那样,这涉及将您的客户端 Web 浏览器指向。ssh -L 8080:localhost:80 [email protected]http://localhost:8080/

您遇到的新问题是,服务器正在运行许多基于名称的虚拟主机,如果您没有在 URL 中向服务器请求主机,那么您就无法获得正确的主机服务,这是很合理的。

最简单的解决方法是告诉您的客户端按名称访问网站,但让操作系统向浏览器谎报主机解析到的 IP 地址。假设您想通过我们已经设置的 SSH 隧道访问主机vsite1.example.comvsite2.example.org,它们都在服务器上的端口 80 上提供服务。

编辑您的客户端 /etc/hosts文件来告诉你的操作系统这些主机名解析为127.0.0.1,其中包含以下条目

127.0.0.1     localhost localhost.localdomain vsite1.example.com vsite2.example.org

我相信 Windows 有相应的黑客程序,但我不知道它们是什么,因为我从来没有使用过它。

现在你可以将客户端浏览器指向http://vsite1.example.com:8080/,客户端操作系统将告诉浏览器位于本地主机上,URL 将指向浏览器本地主机端口 8080,ssh 将传输数据包浅粉色到服务器端口 80,客户端浏览器将向服务器的 Web 服务器询问正确的虚拟主机。

答案2

如果您进行端口转发,ssh 不会创建代理设置。

因此,要么直接将浏览器引导至http://localhost:8080,要么为指向本地主机的“server.com”创建主机条目。

如果您将浏览器设置更改为在端口 8080 上使用代理,则 ssh 端口转发必须转发代理端口而不是 Web 服务器端口。在 server.com 上安装 squid 将为您提供代理。或者在 apache 内部设置代理。代理当然会带来更多安全问题,因此最好不要设置代理,除非您绝对需要。

相关内容