如何在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.