如何在yum中使用SOCKS代理?


13

yum.conf的手册页描述了几个与代理相关的变量:

          proxy URL to the proxy server that yum should use.
          proxy_username username to use for proxy
          proxy_password password for this proxy

但是如何指定SOCKS代理?

我认为以上只是针对普通的HTTP代理...

Answers:


3

该tsocks应用程序可以将其他所有应用程序袜子化

tsocks app args

太棒了,它已经在默认的Fedora存储库中提供了-通过Google,我刚刚发现了'socksify'(但丁袜子客户端)不可用-并且从源代码编译时在Fedora 17上不起作用。
— maxschlepzig 2012年

究竟如何使用它?
— Chani 2014年

tsocks已过时,最新更新可追溯到2002年。如今,它无法进行yum / curl的袜子化。使用dante代替。它的命令是socksify app args,与tsocks类似。(与tsocks.conf用于命令tsocks一样,您还需要socks.conf用于命令socksify)。但是,要进行袜子化yum,我建议@Klaus回答。修改/etc/yum.conf更好。
— 布鲁斯

17

将此行添加到/etc/yum.conf(从DaPillow的帖子中获得了想法)

proxy=socks5://ip:port

如果需要通过代理解析主机名,那么感谢Danny的评论,它可以做到:

proxy=socks5h://ip:port

它在Fedora 21上使用yum 3.4.3为我工作。


在使用yum 3.2.29的RHEL 2.6.32(64位)上不起作用:-| ProxyChains对于这种目的非常标准!
— 贾汀·库玛

代理链似乎很公平。我用过它,对此感到很高兴;)但是,在您的情况下,我认为是百胜版本是问题所在:3.2.29(我的是3.4.3)
— Klaus

是的,它只是yum版本,而6.5最终版本的默认版本是3.2.29。
— 贾廷·库玛

在RHEL7 / CentOS7(yum 3.4.3)上工作。
— 山姆·哈茨菲尔德

这应该是公认的答案!
— 丹尼·古森

7

如enzitib所指出的,tsocks可用于与一起使用SOCKS代理yum。

更详细地说,可以这样使用它:

$ export TSOCKS_CONF_FILE=$HOME/.tsocks.conf
$ cat .tsocks.conf
server = 127.0.0.1
server_port = 1080
$ tsocks yum ...

tsocks默认使用SOCKS版本4-但是您可以通过'server_type'指令配置5。对于用户/密码选项,有'default_user'/'default_pass'指令和TSOCKS_USERNAME / TSOCKS_PASSWORD环境变量。


5

我正在将CentOS6.x与yum-3.2.29-81,curl / libcurl 7.19.7-53一起使用,并遇到了同样的问题。我在防火墙后面有yum服务器,并且想通过ssh在SOCKS5代理设置上使用yum。理想情况下,我想做到这一点而无需tsock,代理链或任何其他“ socksification”实用程序。

我使用以下命令设置SOCKS5连接:

ssh -D 40000 dmz-server

我在yum python源中打听了一下,发现它们使用pycurl来包装libcurl(还请注意,最初未定义所有代理环境变量-http_proxy,HTTP_PROXY,all_proxy,ALL_PROXY等)。此外,我验证了〜/ .curlrc为空,因此没有污染我的测试结果。

我想看看我是否可以通过socks5代理进行交谈:

curl --socks5 127.0.0.1:40000 http://some-server/some-url

成功返回了远程网页,这是一个好兆头-显示libcurl 可以使用SOCKS5代理。但是,定义环境变量

http_proxy=socks5://127.0.0.1:40000 

还不够:

http_proxy=socks5://127.0.0.1:40000 curl http://some-server/some-url

失败了

此时,我切换到使用Python测试程序test.py:

import pycurl
import sys
sys.stderr.write("Testing %s\n" % pycurl.version)
c = pycurl.Curl()
c.setopt(c.URL, 'http://some-server/some-url')
c.setopt(c.WRITEFUNCTION, sys.stdout.write)
c.setopt(pycurl.PROXYTYPE, pycurl.PROXYTYPE_SOCKS5)
c.perform()
c.close()

现在,跑步

./test.py

将无法获取,但正在运行

http_proxy=socks5://127.0.0.1:40000 ./test.py

将成功获取http:// some-server / some-url。因此,在我看来,CentOS6附带的(公认的)古老的yum / libcurl组合不能正确设置libcurl中的代理类型。我认为正在发生的事情是PROXYTYPE默认使用标准的HTTP代理,而不是在http_proxy环境变量中指定的URL内标识socks5://方案。

无论如何,对/usr/lib/python2.6/site-packages/urlgrabber/grabber.py的以下补丁使我能够通过SOCKS5代理访问http:// yum存储库。在PyCurlFileObject#_set_opts(self,opts = {})中,添加:

if self.scheme == 'http':
  proxy = os.getenv('http_proxy') or os.getenv('HTTP_PROXY') or os.getenv('all_proxy') or os.getenv('ALL_PROXY')
  if proxy and proxy.find("socks5://") != -1:
    self.curl_obj.setopt(pycurl.PROXYTYPE, pycurl.PROXYTYPE_SOCKS5)

在1205号线附近

# ssl options
if self.scheme == 'https':

有了这个改变,

http_proxy=socks5://127.0.0.1:40000 yum install <package_name>

通过SOCKS5 ssh代理成功连接到防火墙另一端的所有http:// yum存储库。

当然,可以在外壳中导出http_proxy环境变量以避免在每次调用yum之前指定它。


1

Proxychaines 对您来说也是个不错的选择!

首先下载它并在proxychains.conf文件中设置您的袜子信息,然后proxyxhanes在要使用袜子代理的任何命令之前输入!


1

将此行添加到/etc/yum.conf并确保使用预期的协议(而不是http):

...    
proxy=socks5h://localhost:1080
...

5
这行不通:Options Error: Error parsing "proxy = "socks5h://abc.mnl.xyz.com:9999/ # "": URL must be http, ftp or https not "socks5h"
— Chani 2014年
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.