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 代理...
答案1
添加此行/etc/yum.conf
(从 DaPillow 的帖子中得到想法)
proxy=socks5://ip:port
如果需要通过代理进行主机名解析,感谢评论中的丹尼,这将做到这一点:
proxy=socks5h://ip:port
它对我来说在 Fedora 21 上使用 yum 3.4.3 有效。
答案2
正如 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 环境变量。
答案3
我正在使用 CentOS6.x 和 yum-3.2.29-81、curl/libcurl 7.19.7-53 并遇到同样的问题。我的 yum 服务器位于防火墙后面,并且希望通过使用 ssh 的 SOCKS5 代理设置来使用 yum。理想情况下,我想在不需要 tsocks、proxychains 或任何其他“socksification”实用程序的情况下执行此操作。
我使用以下命令设置 SOCKS5 连接:
ssh -D 40000 dmz-server
我浏览了 yum python 源代码,发现它们使用了 pycurl 来包装 libcurl(另请注意,所有代理环境变量——http_proxy、HTTP_PROXY、all_proxy、ALL_PROXY 等——最初都是未定义的)。此外,我验证了 ~/.curlrc 是空的,因此它不会污染我的测试结果。
我想看看是否可以让curl 通过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测试程序测试.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_代理环境变量。
无论如何,/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_代理shell 中的环境变量,以避免在每次调用之前指定它嗯。
答案4
Proxychaines
也是您不错的选择!
proxychains.conf
首先下载它并在文件中设置您的袜子信息,然后proxyxhanes
在您想要使用袜子代理的任何命令之前输入!