![通过 ssh 而不是 socks 进行 http 代理](https://linux22.com/image/1274855/%E9%80%9A%E8%BF%87%20ssh%20%E8%80%8C%E4%B8%8D%E6%98%AF%20socks%20%E8%BF%9B%E8%A1%8C%20http%20%E4%BB%A3%E7%90%86.png)
问题很简单,但答案却不简单:
ssh -D 8080 user@host
或者
ssh -gCNf -D 8080 user@host
或者
wathever with -D #
在不支持 SOCKS 的嵌入式设备中,我需要一种可以与 http_proxy 变量一起使用的代理。
我应该怎么办?
答案1
方法 1:使用支持使用 SOCKS 上游的 HTTP 代理,例如 Polipo 或 Privoxy。
首先-D
像往常一样通过 SSH 建立隧道,然后配置 HTTP 代理以使用 SSH 隧道 - 示例 Polipo 配置:
proxyAddress = "::1"
proxyPort = 8118
socksParentProxy = "localhost:8080"
socksProxyType = socks5
最后,使用 将应用程序指向 Polipo http_proxy=localhost:8118
。
方法 2:torsocks
在包装器(或旧版)内运行您的程序tsocks
,它会透明地代理所有连接。它旨在与 Tor 一起使用,但可与任何 SOCKS 服务器配合使用,包括ssh -D
。
方法 3:设置 HTTP 代理在您的服务器上,然后使用ssh -L
来访问它。
答案2
每个-D
结果都进入 SOCKS 服务器。如果您的客户端无法处理 SOCKS,那就别想了-D
。
您必须在远程主机上运行 HTTP 代理并使用以下命令转发-L
:
ssh -f -N -n -L8080:127.0.0.1:8080 host
答案3
我也遇到同样的问题,想通过 SSH 使用 HTTP 代理。因为许多应用程序仅支持 HTTP 代理,而 HTTP 代理在命令行环境中很容易使用。
虽然搜索了几页,但我找不到直接(可以与 Polipo、Privoxy 或 tsocks 链接)的方法来做到这一点......
经过一天的工作,我完成了一个简单的 Golang 版本的 SSH HTTP 代理。请随意尝试一下:马洛里。
目前仅支持RSA密钥(位于$HOME/.ssh/id_rsa)和密码授权。
host
是 SSH 服务器地址,port
如果22
您的管理员没有更改的话。服务器端只是我们的老朋友,sshd
无需任何配置。
mallory -engine=ssh -remote=ssh://host:port
或使用用户名user
mallory -engine=ssh -remote=ssh://user@host:port
或使用用户名user
和密码1234
mallory -engine=ssh -remote=ssh://user:1234@host:port
连接后,HTTP 代理将在 localhost:1315 上提供服务。
答案4
在远程主机上运行 Privoxy,然后使用以下-L
选项通过 SSH 连接到 Privoxy:
-L [绑定地址:]端口:主机:主机端口 指定本地(客户端)主机上的给定端口 转发到远程端的指定主机和端口。这 通过分配套接字来监听本地端口, 可选地绑定到指定的 bind_address。每当一个 con- 连接到此端口,连接将通过 安全通道,并建立与主机端口的连接 来自远程机器的主机端口。
(手册页源)