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, 컬/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

원격 웹 페이지로 성공적으로 돌아왔습니다. 이는 좋은 신호입니다. - 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양말 에이전트를 사용하려는 명령을 입력하기 전에 먼저 다운로드하고 파일에 양말 정보를 설정하세요 !

관련 정보