yum.confのmanページには、プロキシ関連の変数がいくつか記載されています。
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のmanページには、プロキシ関連の変数がいくつか記載されています。
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プロキシのためだけのものだと思います...
回答:
tsocks
アプリケーションは、他のすべてのアプリケーションをソックス化できます
tsocks app args
dante
代わりに使用してください。コマンドはsocksify app args
、tsocksと同様です。(コマンドtsocksのtsocks.confと同様に、コマンドsocksifyのsocks.confも必要です)。ただし、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環境変数があります。
yum-3.2.29-81、curl / libcurl 7.19.7-53でCentOS6.xを使用していますが、これと同じ問題があります。ファイアウォールの内側にyumサーバーがあり、sshを使用してSOCKS5プロキシセットアップでyumを使用したい。理想的には、tsocks、proxychains、またはその他の「socksification」ユーティリティを必要とせずにこれを実行したいです。
以下を使用してSOCKS5接続をセットアップします。
ssh -D 40000 dmz-server
yum pythonソースをいじってみると、libcurlをラップするpycurlを使用していることがわかりました(すべてのプロキシ環境変数(http_proxy、HTTP_PROXY、all_proxy、ALL_PROXYなど)は最初は未定義だったことにも注意してください)。さらに、〜/ .curlrcが空であることを確認したため、テスト結果が汚染されませんでした。
カールがsocks5プロキシを介して通信できるかどうかを確認したかったのです。
curl --socks5 127.0.0.1:40000 http://some-server/some-url
リモートWebページが正常に返されたため、これは良い兆候でした。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_proxy環境変数で指定されたURL内のsocks5://スキームを識別するのではなく、標準の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_proxy環境変数をエクスポートして、yumを呼び出す前に指定しないようにすることもできます。