Saltar al contenido

¿Cómo usar el proxy SOCKS con yum?

Solución:

Agregar esta línea a /etc/yum.conf (obtuve la idea de la publicación de DaPillow)

proxy=socks5://ip:port

En caso de que sea necesaria la resolución del nombre de host a través de proxy, gracias a Danny de los comentarios esto lo haría:

proxy=socks5h://ip:port

Me funcionó usando yum 3.4.3 en Fedora 21.

Como señaló enzitib,tsocks se puede utilizar para utilizar un proxy SOCKS con yum.

Para ser más detallado, se puede usar así:

$ export TSOCKS_CONF_FILE=$HOME/.tsocks.conf
$ cat .tsocks.conf
server = 127.0.0.1
server_port = 1080
$ tsocks yum ...

Por defecto, tsocks usa SOCKS versión 4, pero puede configurar 5 a través de la directiva ‘server_type’. Para las opciones de usuario / contraseña existen las directivas ‘default_user “https://foroayuda.es/” default_pass’ y las variables de entorno TSOCKS_USERNAME / TSOCKS_PASSWORD.

Estoy usando CentOS6.x con yum-3.2.29-81, curl / libcurl 7.19.7-53 y tengo el mismo problema. Tengo servidores yum detrás de un firewall y quiero usar yum sobre una configuración de proxy SOCKS5 usando ssh. Idealmente, quiero hacer esto sin requerir tsocks, proxychains o cualquier otra utilidad de “socksification”.

Configuré la conexión SOCKS5 usando:

ssh -D 40000 dmz-server

Busqué en las fuentes de yum python y vi que usaban pycurl que envuelve libcurl (también tenga en cuenta que todas las variables de entorno de proxy, http_proxy, HTTP_PROXY, all_proxy, ALL_PROXY, etc., inicialmente no estaban definidas). Además, verifiqué que ~ / .curlrc estaba vacío, por lo que no manchó los resultados de mi prueba.

Quería ver si podía hacer que curl hablara a través del proxy socks5:

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

devolvió con éxito la página web remota, por lo que fue una buena señal: mostrar libcurl pueden utilizar proxies SOCKS5. Sin embargo, definir una variable de entorno

http_proxy=socks5://127.0.0.1:40000 

no fue suficiente:

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

fallido.

En este punto, cambié a usar un programa de prueba de Python test.py:

import pycurl
import sys
sys.stderr.write("Testing %sn" % 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()

Ahora, corriendo

./test.py

no se recuperará, pero se ejecutará

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

voluntad recuperar http: // some-server / some-url. Entonces me parece que esta combinación (ciertamente antigua) yum / libcurl que viene con CentOS6 no está configurando correctamente el tipo de proxy dentro de libcurl. Creo que lo que está sucediendo es que el PROXYTYPE está por defecto en un proxy HTTP estándar en lugar de identificar el esquema socks5: // dentro de la URL especificada en el http_proxy Variable ambiental.

En cualquier caso, el siguiente parche para /usr/lib/python2.6/site-packages/urlgrabber/grabber.py funcionó para permitirme acceder a los repositorios http: // yum a través de un proxy SOCKS5. Dentro de PyCurlFileObject # _set_opts (self, opts = {}), agregue:

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)

alrededor de la línea 1205, justo antes

# ssl options
if self.scheme == 'https':

Con este cambio

http_proxy=socks5://127.0.0.1:40000 yum install <package_name>

se conecta con éxito a todos mis repositorios http: // yum en el otro lado del firewall a través del proxy ssh SOCKS5.

Por supuesto, se podría exportar el http_proxy variable de entorno dentro del shell de uno para evitar especificarlo antes de cada invocación de mmm.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *