Как использовать прокси SOCKS с yum?

Страница man для 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-прокси-серверов …

6 Solutions collect form web for “Как использовать прокси SOCKS с yum?”

Приложение tsocks может соседировать все другие приложения

 tsocks app args 

Добавьте эту строку в /etc/yum.conf (получил идею от поста DaPillow)

proxy=socks5://ip:port

В случае необходимости разрешения имени узла через прокси, благодаря Дэнни из комментариев, это сделало бы это:

proxy=socks5h://ip:port

Это работало для меня, используя yum 3.4.3 на Fedora 21, надеюсь, что это поможет.

Как указано 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, но вы можете настроить 5 через директиву server_type. Для параметров пользователя / пароля существуют директивы 'default_user' / 'default_pass' и переменные среды TSOCKS_USERNAME / TSOCKS_PASSWORD.

Я использую CentOS6.x с yum-3.2.29-81, curl / libcurl 7.19.7-53 и имею эту же проблему. У меня есть серверы yum за брандмауэром и вы хотите использовать yum через прокси-сервер SOCKS5 с помощью ssh. В идеале я хочу сделать это, не требуя чинов, proxychains или любых других утилит «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 . Поэтому мне кажется, что эта (по общему признанию, древняя) комбинация yum / libcurl, которая поставляется с CentOS6, неправильно устанавливает тип прокси-сервера в libcurl. Я думаю, что происходит то, что PROXYTYPE по умолчанию выполняет стандартный HTTP-прокси вместо того, чтобы идентифицировать схему socks5: // в URL-адресе, указанном в переменной среды http_proxy .

В любом случае следующий патч для /usr/lib/python2.6/site-packages/urlgrabber/grabber.py работал, чтобы позволить мне обращаться к репозиториям http: // yum через прокси-сервер SOCKS5. В 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> 

успешно соединяется со всеми моими репозиториями http: // yum на другой стороне брандмауэра через прокси-сервер SOCKS5 ssh.

Конечно, можно экспортировать переменную окружения http_proxy внутри оболочки, чтобы избежать указания ее перед каждым вызовом yum .

Proxychaines также является хорошим вариантом для вас!

сначала загрузите его и установите информацию о ваших носках в файле proxychains.conf и введите proxyxhanes перед любой командой, которую вы хотите использовать прокси-сервер socks!

Добавьте эту строку в /etc/yum.conf и убедитесь, что используете ожидаемый протокол (а не http):

 ... proxy=socks5h://localhost:1080 ... 
  • Могу ли я автоматизировать ответы y / N при установке с помощью yum?
  • Создание локального репозитория yum без rpms
  • Установите пакеты yum на смонтированный том
  • как определить парсер yum variables, где начинается и заканчивается идентификатор переменной yum?
  • Обновление Yum показывает «Killed»
  • yum установить пакет без обновления других пакетов или сбой ...?
  • Что YUM делает после завершения процесса
  • Как разрешать только точные обновления пакетов из репозитория?
  • Что происходит, когда я включаю или отключу репо
  • Msgstr "Нет пакета <имя пакета>."?
  • После обновления yum рекомендуется перезапустить сервер?
  • Linux и Unix - лучшая ОС в мире.