Como usar o proxy SOCKS com o yum?

13

A página de manual 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?

Presumo que o acima é apenas para proxies HTTP normais ...

maxschlepzig
fonte

Respostas:

3

O tsocksaplicativo pode reduzir o tamanho de todos os outros aplicativos

tsocks app args
enzotib
fonte
Impressionante, ele já está disponível nos repositórios padrão do Fedora - via Google, encontrei 'socksify' (cliente dante socks) que não está disponível - e não funciona no Fedora 17 quando compilado a partir da fonte.
maxschlepzig
Como usá-lo exatamente?
Chani
O tsocks está desatualizado, a atualização mais recente está em 2002. Atualmente, não pode fazer o socksify yum / curl. Use em dantevez disso. Seu comando é socksify app argssemelhante aos tsocks. (e da mesma forma que tsocks.conf para o comando tsocks, você também precisa do socks.conf para o comando socksify). No entanto, para socksify yum, recomendo a resposta de @Klaus. Modifique /etc/yum.conf é melhor.
Bruce Bruce
17

Adicione esta linha a /etc/yum.conf(peguei a ideia da postagem de DaPillow)

proxy=socks5://ip:port

Caso seja necessária a resolução do nome do host por meio de proxy, graças a Danny pelos comentários, isso seria o seguinte:

proxy=socks5h://ip:port

Funcionou para mim usando o yum 3.4.3 no Fedora 21.

Klaus
fonte
Não funciona no RHEL 2.6.32 (64Bit) com o yum 3.2.29: - | ProxyChains é bastante padrão para esse fim!
precisa saber é o seguinte
proxychains parece justo o suficiente. Eu usei-o e eu estou feliz com isso;) Mas no seu caso, eu acho que a versão yum é o problema: 3.2.29 (o meu é 3.4.3)
Klaus
Sim, concordou, é apenas a versão yum e 3.2.29 é o padrão para a versão 6.5 final.
precisa saber é o seguinte
Funciona no RHEL7 / CentOS7 (yum 3.4.3).
Sam Hartsfield
Essa deve ser a resposta aceita!
111117 Danny Goossen
7

Conforme indicado pelo enzitib, tsockspode ser usado para usar um proxy SOCKS yum.

Para ser mais detalhado, pode-se usá-lo 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 5 através da diretiva 'server_type'. Para opções de usuário / senha, existem as diretivas 'default_user' / 'default_pass' e as variáveis ​​de ambiente TSOCKS_USERNAME / TSOCKS_PASSWORD.

maxschlepzig
fonte
5

Estou usando o CentOS6.x com yum-3.2.29-81, curl / libcurl 7.19.7-53 e tenho esse mesmo problema. Eu tenho servidores yum atrás de um firewall e quero usá-los em uma configuração de proxy SOCKS5 usando ssh. Idealmente, quero fazer isso sem exigir tsocks, proxychains ou qualquer outro utilitário de "socksification".

Eu configurei a conexão SOCKS5 usando:

ssh -D 40000 dmz-server

Eu procurei nas fontes yum python e vi que elas usam pycurl, que envolve a libcurl (observe também 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 e não manchou os resultados dos meus testes.

Eu queria ver se conseguia curl para falar através do proxy socks5:

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

retornou com êxito a página da web remota, de modo que foi um bom sinal - mostrar que a libcurl pode usar proxies do SOCKS5. No entanto, definir 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 o uso de um programa de teste 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 correndo

./test.py

falhará ao buscar, mas executando

http_proxy=socks5://127.0.0.1:40000 ./test.py

buscará com êxito http: // some-server / some-url . Portanto, parece-me que essa combinação yum / libcurl (reconhecidamente antiga) fornecida com o CentOS6 não está configurando corretamente o tipo de proxy no libcurl. Acho que o que está acontecendo é que o PROXYTYPE está padronizando para um proxy HTTP padrão em vez de identificar o esquema socks5: // dentro da URL especificada na variável de ambiente http_proxy .

De qualquer forma, o seguinte patch para /usr/lib/python2.6/site-packages/urlgrabber/grabber.py funcionou para permitir o acesso aos repositórios http: // yum por meio de um proxy SOCKS5. No 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)

em torno 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 com êxito a todos os meus repositórios http: // yum do outro lado do firewall por meio do proxy ssh SOCKS5.

Obviamente, pode-se exportar a variável de ambiente http_proxy dentro do shell para evitar especificá-la antes de cada chamada do yum .

Gato Limão
fonte
1

Proxychaines Também é uma boa opção para você!

primeiro baixe-o e defina suas informações de meias em proxychains.confarquivo e insira proxyxhanesantes de qualquer comando que você deseja usar proxy de meias!

Milad Sobhkhiz
fonte
1

Adicione esta linha /etc/yum.confe certifique-se de usar o protocolo esperado (não http):

...    
proxy=socks5h://localhost:1080
...
Ramesh
fonte
5
Isso não funciona:Options Error: Error parsing "proxy = "socks5h://abc.mnl.xyz.com:9999/ # "": URL must be http, ftp or https not "socks5h"
Chani