通过SSH而不是袜子的HTTP代理


30

问题很简单,但答案不是:

ssh -D 8080 user@host

要么

ssh -gCNf -D 8080 user@host

要么

wathever with -D #

在不支持SOCKS的嵌入式设备中,我需要一种可以与http_proxy变量一起使用的代理。

我该怎么办?


不是ssh -D user@host:8080吗?
ngen

我已经用ssh做了一段时间了。通过ssh的vnc。但是我可以假设通过ssh使用squid(http代理)。虽然现在我不记得我是怎么做到的。这不是-D'cos(如您所知-并且比我更好)-如果我记得,D是袜子。
barlop 2011年

@ngen:编号-D指定打开隧道的端口,而不是要连接的端口。(出于兼容性原因,即使将连接端口指定为-p port,也不指定:port。)
grawity 2011年

Answers:


33

方法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来访问它。


Privoxy是最好的解决方案。非常感谢。
Seyed Morteza

18

每个-D结果都进入SOCKS服务器。如果您的客户无法处理袜子,那就算了-D

您必须在远程主机上运行HTTP代理并转发-L

ssh -f -N -n -L8080:127.0.0.1:8080 host

2
为了运行代理,我发现“ tinyproxy”超级简单,并且默认情况下已经进行了合理配置。在Ubuntu / etc远程主机上,只需“ sudo apt-get install tinyproxy”,然后按上述方式转发到端口8888:“ ssh -L8888:127.0.0.1:8888”
Jimbly

7

我有想要通过SSH使用HTTP代理的相同问题。由于许多应用程序仅支持HTTP代理,因此HTTP代理易于在命令行环境中使用。

虽然搜索了几页,但是我找不到直接的方法(可以与Polipo,Privoxy或tsocks链接)来执行此操作...

经过几天的工作,我通过SSH完成了一个简单的Golang版本的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
ssh -L 8080:localhost:12345 user@host

从远程计算机上可以看到,这将打开本地计算机上的端口8080,并将所有数据转发到localhost上的端口12345。


2
别忘了,您还必须在远程主机上运行HTTP代理。端口转发本身无济于事。
乔纳森

2

在远程主机上运行Privoxy,然后使用以下-L选项通过SSH连接到Privoxy :

-L [bind_address:] port:host:hostport
         指定本地(客户端)主机上的给定端口为
         转发到给定的主机和远程端口。这个
         通过分配一个套接字来侦听本地端的端口,
         (可选)绑定到指定的bind_address。每当有
         连接到该端口,连接转发
         安全通道,并与主机端口建立连接
         远程计算机上的主机端口。

联机帮助页


1

您也可以使用开瓶器(GPL)

将以下内容添加到您的 .ssh/config

Host=RemoteServerIP or Name
User=UserLoginName
Port=PortNumber
ProxCommand=/usr/bin/corkscrew Proxy.Adress PortNumber %h %p

corkscrew通过Http代理而不是要求的反向运行ssh。
eMBee '18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.