yumでSOCKSプロキシを使用する方法は?

yumでSOCKSプロキシを使用する方法は?

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

プロキシを介したホスト名解決が必要な場合は、コメントにあるDannyのおかげで、次のようにトリックを実行できます。

proxy=socks5h://ip:port

yum 3.4.3を使用するFedora 21で動作します。

答え2

tsocksenzitibが指摘したように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を使用したいと思います。理想的には、ソックス、プロキシチェーン、またはその他の「ソックス」ユーティリティなしでこれを実行したいと思います。

次のコマンドを使用してSOCKS5接続を確立しました。

ssh -D 40000 dmz-server

yum pythonのソースコードを調べたところ、libcurlをラップするためにpycurlを使用していることがわかりました(すべてのプロキシ環境変数(http_proxy、HTTP_PROXY、all_proxy、ALL_PROXYなど)は最初は定義されていません)。また、~/.curlrcが空であるため、テスト結果が汚染されないことを確認しました。

私はソックス5プロキシを介して通信するためにカールを使用できることを確認したかったです。

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

リモートWebページに正常に戻りました。これは良い信号です。 - show 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環境変数

とにかく、/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各呼び出しの前に環境変数を指定しないように、シェル内の環境変数まあ

答え4

Proxychainesそれはまたあなたのための良い選択です!

proxychains.confproxyxhanesソックスエージェントを使用したいコマンドを入力する前に、まずダウンロードしてファイルにソックス情報を設定してください。

関連情報