¿Cómo usar SOCKS proxy con yum?

13

La página del manual de yum.conf describe varias variables relacionadas con el proxy:

          proxy URL to the proxy server that yum should use.
          proxy_username username to use for proxy
          proxy_password password for this proxy

Pero, ¿cómo especificar un proxy SOCKS?

Supongo que lo anterior es solo para servidores proxy HTTP normales ...

maxschlepzig
fuente

Respuestas:

3

La tsocksaplicación puede socksify todas las demás aplicaciones

tsocks app args
enzotib
fuente
Impresionante, ya está disponible en los repositorios predeterminados de Fedora, a través de Google acabo de encontrar 'socksify' (cliente de calcetines dante) que no está disponible, y no funciona en Fedora 17 cuando se compila desde la fuente.
maxschlepzig
¿Cómo usarlo exactamente?
Chani
tsocks está desactualizado, la última actualización es de 2002. Hoy en día no puede socksify yum / curl. Usar en su dantelugar. Su comando es socksify app argssimilar a tsocks. (y al igual que tsocks.conf para el comando tsocks, también necesita socks.conf para el comando socksify). Sin embargo, para socksify yum, recomiendo la respuesta de @Klaus. Modificar /etc/yum.conf es mejor.
Bruce
17

Agregue esta línea a /etc/yum.conf(tengo 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 del proxy, gracias a Danny de los comentarios esto lo haría:

proxy=socks5h://ip:port

Funcionó para mí usando yum 3.4.3 en Fedora 21.

Klaus
fuente
No funciona en RHEL 2.6.32 (64Bit) con yum 3.2.29: - | ¡ProxyChains es bastante estándar para tal propósito!
Jatin Kumar
proxychains parece bastante justo. Lo he usado y estoy contento con eso;) Pero en su caso, creo que la versión yum es el problema: 3.2.29 (la mía es 3.4.3)
Klaus
Sí, de acuerdo, es solo la versión yum y 3.2.29 es el predeterminado para la versión final 6.5.
Jatin Kumar
Funciona en RHEL7 / CentOS7 (yum 3.4.3).
Sam Hartsfield
¡Esta debería ser la respuesta aceptada!
Danny Goossen
7

Como señaló enzitib, tsocksse puede usar para usar un proxy SOCKS con yum.

Para ser más detallado, uno puede usarlo 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 están las directivas 'default_user' / 'default_pass' y las variables de entorno TSOCKS_USERNAME / TSOCKS_PASSWORD.

maxschlepzig
fuente
5

Estoy usando CentOS6.x con yum-3.2.29-81, curl / libcurl 7.19.7-53 y tengo este 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 usan pycurl que envuelve libcurl (también tenga en cuenta que todas las variables de entorno proxy - http_proxy, HTTP_PROXY, all_proxy, ALL_PROXY, etc., estaban inicialmente indefinidas). Además, verifiqué que ~ / .curlrc estaba vacío, por lo que no contaminó los resultados de mi prueba.

Quería ver si podía obtener curl para hablar 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 que libcurl puede usar los servidores proxy 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

ha fallado.

En este punto, cambié a usar un programa de prueba de 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()

Ahora corriendo

./test.py

fallará al buscar, pero se ejecuta

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

buscará con éxito http: // some-server / some-url . Entonces, me parece que esta combinación yum / libcurl (ciertamente antigua) que se envía con CentOS6 no está configurando correctamente el tipo de proxy dentro de libcurl. Creo que lo que está sucediendo es que el PROXYTYPE está predeterminado a un proxy HTTP estándar en lugar de identificar el esquema socks5: // dentro de la URL especificada en la variable de entorno http_proxy .

En cualquier caso, el siguiente parche para /usr/lib/python2.6/site-packages/urlgrabber/grabber.py funcionó para permitirme acceder a http: // repositorios 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 SOCKS5 ssh.

Por supuesto, uno podría exportar la variable de entorno http_proxy dentro de su shell para evitar especificarla antes de cada invocación de yum .

Gato limón
fuente
1

Proxychaines ¡También es una buena opción para ti!

¡primero descárguelo y configure la información de sus calcetines en el proxychains.confarchivo e ingrese proxyxhanesantes de cualquier comando que desee usar calcetines proxy!

Milad Sobhkhiz
fuente
1

Agregue esta línea /etc/yum.confy asegúrese de usar el protocolo esperado (no http):

...    
proxy=socks5h://localhost:1080
...
Ramesh
fuente
55
Esto no funciona:Options Error: Error parsing "proxy = "socks5h://abc.mnl.xyz.com:9999/ # "": URL must be http, ftp or https not "socks5h"
Chani