我有一个设置(我无法更改),我需要从本地计算机访问 Web 服务器。我无法直接访问 Web 服务器。只能通过代理访问。但是,代理只能从跳转主机访问(我可以使用 SSH 访问)。
+------------+ SOCKS5 +-----------+ HTTP +-------+ HTTP +-----------+
| My browser | ------------> | Jump Host |---------> | Proxy | -----> | Webserver |
+------------+ via ssh +-----------+ Proxy +-------+ +-----------+
ssh -N -D 9090 username@jumphost
我可以通过告诉我的浏览器到 localhost:9090 的用户 SOCKS5 来成功创建到跳转主机的 SOCKS5 隧道。
但是,我无法将 HTTP 代理与 SOCKS5 隧道一起使用。我猜想需要告知 Jump Host 上的 sshd 使用代理发出 HTTP(S) 请求。我找不到此设置。这可能吗?
答案1
我猜想需要告知 Jump Host 上的 sshd 使用代理发出 HTTP(S) 请求。我找不到此设置。
没有,因为 sshd 不会发出或理解 HTTP(S) 请求。
它只建立 TCP 连接,理论上可以可以使用 HTTP CONNECT 以通用方式代理(实际上与 HTTPS 请求的代理方式相同),但 OpenSSH sshd 中没有这样的功能。
这可能吗?
删除 SOCKS5 部分并让您的浏览器通过 SSH 直接与远程 HTTP 代理通信。
您正在浏览器和 SSH 之间创建 SOCKS5 隧道客户–不是在浏览器和 sshd 之间;在网络上,它与静态定义的-L
隧道没有区别。因此,您不妨只-L
为 HTTP(S) 代理设置隧道:
$ ssh -N -L 9080:the_proxy:8080 jumphost
HTTP Proxy: [localhost] Port: [9080]