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代理...
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:
该tsocks
应用程序可以将其他所有应用程序袜子化
tsocks app args
dante
代替。它的命令是socksify app args
,与tsocks类似。(与tsocks.conf用于命令tsocks一样,您还需要socks.conf用于命令socksify)。但是,要进行袜子化yum
,我建议@Klaus回答。修改/etc/yum.conf更好。
将此行添加到/etc/yum.conf
(从DaPillow的帖子中获得了想法)
proxy=socks5://ip:port
如果需要通过代理解析主机名,那么感谢Danny的评论,它可以做到:
proxy=socks5h://ip:port
它在Fedora 21上使用yum 3.4.3为我工作。
如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环境变量。
我正在将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之前指定它。
Proxychaines
对您来说也是个不错的选择!
首先下载它并在proxychains.conf
文件中设置您的袜子信息,然后proxyxhanes
在要使用袜子代理的任何命令之前输入!
将此行添加到/etc/yum.conf
并确保使用预期的协议(而不是http):
...
proxy=socks5h://localhost:1080
...
Options Error: Error parsing "proxy = "socks5h://abc.mnl.xyz.com:9999/ # "": URL must be http, ftp or https not "socks5h"