今天我回想了一下设置 ssh 隧道的方法,看到了几个描述如何将某个本地端口转发到网站的资料。例如:https://www.techrepublic.com/article/how-to-use-local-and-remote-ssh-port-forwarding
“在你的客户端上打开一个终端窗口并发出命令:
ssh -L 8080:www.slashdot.org:80 本地主机
系统将提示您输入客户端计算机的用户密码。本质上,您是通过 SSH 连接回客户端计算机,但创建到目的地的必要 SSH 隧道。成功通过本地帐户进行身份验证后,打开浏览器并将其指向http://本地主机:8080。您的浏览器会自动将您重定向至 Slashdot。”
只是,如果你真的尝试,这不起作用。我最终遇到了连接失败、500 错误、404 错误等。我尝试过其他网站,甚至非 https。怎么回事?
答案1
这种技术有效,但对于访问网站来说并不是很好,因为您需要为所访问的每个域转发一个端口。如果您在 Chrome 中加载 slashdot 并使用开发人员工具,您会发现,当您加载 slashdot 时,它实际上正在加载来自至少 21 个不同域的内容。如果您只转发一个域,那么您将看不到所有内容。
另一个问题是,您正在通过隧道连接到端口 80 上的某个站点,而该站点在端口 443 上提供内容。如果您运行“curl -i slashdot.org”,您将看到它为您提供了 301 重定向到 HTTPS。当浏览器尝试按照重定向到 HTTPS 时,一切都会失败。
最好使用 ssh 作为 SOCKS 代理,并配置浏览器以使用它。您可以像这样在本地端口上打开 socks 代理:
ssh -D 8080 myhost.com
myhost.com 在您的情况下可能是“localhost”,但通常是远程服务器。打开此会话后,只需进入浏览器首选项并将浏览器配置为使用指向本地主机端口 8080 的 SOCKS v5 代理(在我看来,在 Firefox 中比在 Chrome 中更容易执行此操作)。完成后,浏览器将通过 ssh 隧道运行其所有流量。
这对于访问托管在私人网络上的网站或通过您认为不安全的网络加密数据非常有用。
答案2
Jeff 完全正确,但是我想补充一个有关本地端口转发的解决方案:
由于您尝试访问的网站使用 HTTPS,因此您需要访问其端口443
。
$ ssh -L 8080:www.slashdot.org:443 localhost
除此之外,您需要https://
在浏览器中使用 而不是http://
,这样您就可以在浏览器中访问以下 URL:https://localhost:8080
。在 Firefox 上,这向我展示了“不安全连接”警告,因为显然您尝试访问的网站颁发的 SSL 证书未签署用于 localhost。但是您可以忽略此警告并继续。