为什么 SSH 协议无法成功连接到目标?

为什么 SSH 协议无法成功连接到目标?

在 Firefox 中,我可以连接到google.com:80.但是之后

$ ssh -L 9000:google.com:80 testme@localhost

在 Firefox 中,我连接到http://localhost:9000/,然后

  1. 这是一个错误。

在此服务器上找不到请求的 URL /。我们知道的就这些。

为什么有这样的差别呢?谢谢。

答案1

您的连接已正确建立,但您的浏览器正在请求 Google 服务器未配置为处理的主机和 URL(“localhost:9000”上的“/”)。

curl -v您可以使用;查看请求它将至少包含

GET / HTTP/1.1
Host: localhost:9000

“Host”行用于确定正在请求哪个虚拟主机(这是 HTTP 1.1 相对于 1.0 的新增内容之一)。 Google 服务器没有配置“localhost:9000”的虚拟主机,因此它们无法找到请求的资源并回复 404 状态。

在大多数情况下,如果您想解决 Web 浏览问题并且正在考虑使用 SSH 隧道,则应该使用代理。在某些情况下,如有必要,您可能最终会使用 SSH 隧道来转发代理的侦听端口;但您通常不会使用 SSH 隧道转发 Web 服务器的侦听端口。

但是,如果您想了解这里发生的情况,并使隧道可在 Web 浏览器中使用(忽略上述内容),则需要确保本地主机将在目标期望的相同主机和端口上进行响应,或者指定应使用的“Host”标头curl

curl -H "Host: google.com" http://localhost:9000/

例如,使用 Web 浏览器,您可以在创建隧道时指定 IP 地址而不是主机名

ssh -L 9000:216.58.213.142:443 testme@localhost

然后加

127.0.0.1 google.com www.google.com

在浏览器中访问您的/etc/hosts文件之前。https://google.com:9000

相关内容