O aplicativo tsocks
pode armazenar todos os outros aplicativos
tsocks app args
A página man do yum.conf descreve várias variáveis relacionadas ao proxy:
proxy URL to the proxy server that yum should use. proxy_username username to use for proxy proxy_password password for this proxy
Mas como especificar um proxy SOCKS?
Eu assumo que o acima é apenas para proxies HTTP normais ...
Adicione esta linha a /etc/yum.conf
(pegou a ideia do post de DaPillow)
proxy=socks5://ip:port
Caso a resolução do nome do host por meio de proxy seja necessária, graças a Danny por comentários, isso seria necessário:
proxy=socks5h://ip:port
Funcionou para mim usando o yum 3.4.3 no Fedora 21, espero que isso ajude.
Como apontado por enzitib, tsocks
pode ser usado para usar um proxy SOCKS com yum
.
Para ser mais detalhado, pode-se usar assim:
$ export TSOCKS_CONF_FILE=$HOME/.tsocks.conf
$ cat .tsocks.conf
server = 127.0.0.1
server_port = 1080
$ tsocks yum ...
Por padrão, o tsocks usa o SOCKS versão 4 - mas você pode configurar o 5 através da diretiva 'server_type'. Para opções de usuário / senha, há as diretivas 'default_user' / 'default_pass' e as variáveis de ambiente TSOCKS_USERNAME / TSOCKS_PASSWORD.
Estou usando o CentOS6.x com yum-3.2.29-81, curl / libcurl 7.19.7-53 e tenho esse mesmo problema. Eu tenho yum servidores atrás de um firewall e quero usar o yum em uma configuração de proxy SOCKS5 usando ssh. Idealmente, quero fazer isso sem exigir tsocks, proxychains ou quaisquer outros utilitários de "sockificação".
Eu configurei a conexão do SOCKS5 usando:
ssh -D 40000 dmz-server
Eu investiguei as fontes python do yum e vi que elas usam pycurl que envolve libcurl (também observe que todas as variáveis de ambiente proxy - http_proxy, HTTP_PROXY, all_proxy, ALL_PROXY, etc.-- foram inicialmente indefinidas). Além disso, verifiquei que o ~ / .curlrc estava vazio, por isso não manchou os resultados do meu teste.
Eu queria ver se eu poderia me curvar para falar através do proxy socks5:
curl --socks5 127.0.0.1:40000 http://some-server/some-url
retornou com sucesso a página web remota, de modo que foi um bom sinal - mostrando libcurl pode usar proxies SOCKS5. No entanto, definindo uma variável de ambiente
http_proxy=socks5://127.0.0.1:40000
não foi suficiente:
http_proxy=socks5://127.0.0.1:40000 curl http://some-server/some-url
falhou.
Neste ponto, mudei para um programa de teste do 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()
Agora, executando
./test.py
falhará em buscar, mas executando
http_proxy=socks5://127.0.0.1:40000 ./test.py
irá buscar com êxito o link . Então, parece-me que essa (admitidamente antiga) combinação yum / libcurl que vem com o CentOS6 não está configurando corretamente o tipo de proxy dentro do libcurl. Eu acho que o que está acontecendo é que o PROXYTYPE é o padrão para um proxy HTTP padrão, em vez de identificar o esquema socks5: // dentro da URL especificada na variável de ambiente link .
Em qualquer caso, o seguinte patch para /usr/lib/python2.6/site-packages/urlgrabber/grabber.py funcionou para permitir que eu acessasse os repositórios http: // yum através de um proxy SOCKS5. Dentro de PyCurlFileObject # _set_opts (self, opts = {}), adicione:
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)
ao redor da linha 1205, logo antes
# ssl options
if self.scheme == 'https':
Com essa mudança,
http_proxy=socks5://127.0.0.1:40000 yum install <package_name>
conecta-se com sucesso a todos os meus repositórios http: // yum no outro lado do firewall através do proxy ssh do SOCKS5.
Naturalmente, é possível exportar a variável de ambiente link dentro do shell de uma pessoa para evitar especificá-la antes de cada invocação de yum .
Proxychaines
também é uma boa opção para você!
primeiro faça o download e configure suas informações de meias no arquivo proxychains.conf
e digite proxyxhanes
antes de qualquer comando que você queira usar o proxy socks!
Adicione esta linha a /etc/yum.conf
e certifique-se de usar o protocolo esperado (não http):
...
proxy=socks5h://localhost:1080
...
Tags yum