【问题标题】:Trouble SSH Tunneling to remote serverSSH隧道到远程服务器的问题
【发布时间】:2012-10-02 11:22:22
【问题描述】:

我试图从我的本地计算机访问被 IP 锁定的远程供应商网站(我们的公司服务器被允许访问)。我通过从可以毫无问题地访问 API 的服务器建立隧道来做到这一点,但是,当我设置 SSH 隧道并转到供应商网站上的 URL 时,我收到 404 Not Found 错误。这是我正在使用的:

ssh -f -N user@example.com -L 7777:vendorhostexample.com:80

一切都表明隧道设置正确,但如果我尝试使用诸如“http://localhost:7777/foobar”之类的 URL,则会收到 404 错误。有什么想法吗?

【问题讨论】:

    标签: linux ssh ssh-tunnel


    【解决方案1】:

    您的问题是您正在发送 http 标头“Location: localhost”,这意味着如果目标网络服务器使用虚拟主机,它将尝试查找网站“localhost”而不是网站“vendorhostexample.com”

    一种方法是 Ryan 指出修改您的主机文件并告诉您的机器 vendorhostexample.com 它位于 127.0.0.1 上,这样当您在浏览器中键入它时,您将通过正确的“主机: " http 标头集。

    另一种方法是为您的浏览器安装扩展程序以更改主机标头,例如用于 firefox 的 this one

    【讨论】:

    • 终于有时间看看这个...如果我更改主机标头,它可以工作,但我无法通过将供应商 URL 指向我的本地主机来让它工作 - 知道为什么会这样不工作?我并不总是使用浏览器,如果没有必要,我不想更改代码中的主机。
    • 如果你在你的主机文件(Linux 上的 /etc/hosts)中添加一行告诉你的机器 vendorhostexample 它在​​ 127.0.0.1 上,你不需要设置主机头。该行将如下所示:127.0.0.1 vendorhostexample.com www.vendorhostexample.com
    【解决方案2】:

    其他人已经提到了域名匹配错误虚拟主机的问题。另一种解决方案是使用动态隧道。

    如果您使用-D 8080 标志打开连接,SSH 将打开一个动态隧道,并在端口 8080 上公开一个 SOCKS 代理。如果您随后将浏览器(或您选择的应用程序)设置为使用 SOCKS 代理在 localhost:8080 上,您可以将所有流量通过隧道传输到服务器。

    【讨论】:

      【解决方案3】:

      您可以编辑本地主机(Linux 的 /etc/hosts)文件,并添加如下行:

      127.0.0.1 vendorhostexample.com
      

      然后再试一次。

      【讨论】:

      • 在尝试此操作后,我仍然得到 404 - 隧道两侧的端口是否必须为 80 才能使用此方法?
      【解决方案4】:

      你用这个破坏了 HTTP。您的浏览器在 HTTP 标头中发送主机名 localhost,这意味着您正在请求供应商网站的 localhost 网站。他们几乎可以肯定不会在他们的服务器上托管localhost 网站,所以你得到了 404。

      你不能以你现在的方式隧道 HTTP。您需要在公司服务器上设置适当的 HTTP 代理。

      【讨论】:

      • 设置 Http 代理的最佳方法是什么?
      • 你不需要为此设置一个http代理,有很多方法可以实现它没有一个。从@raynix 指出的更改本地主机到添加浏览器扩展来替换请求的“主机:”标头。
      猜你喜欢
      • 1970-01-01
      • 2016-02-13
      • 1970-01-01
      • 2016-01-28
      • 1970-01-01
      • 2016-02-06
      • 2014-05-03
      • 2017-01-01
      • 2020-07-05
      相关资源
      最近更新 更多