Comment utiliser le proxy SOCKS avec yum?

13

La page de manuel de yum.conf décrit plusieurs variables liées au proxy:

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

Mais comment spécifier un proxy SOCKS?

Je suppose que ce qui précède est juste pour les proxys HTTP normaux ...

maxschlepzig
la source

Réponses:

3

L' tsocksapplication peut simplifier toutes les autres applications

tsocks app args
enzotib
la source
Génial, il est déjà disponible dans les référentiels Fedora par défaut - via Google, je viens de trouver 'socksify' (client de chaussettes dante) qui n'est pas disponible - et ne fonctionne pas sur Fedora 17 lorsqu'il est compilé à partir de la source.
maxschlepzig
Comment l'utiliser exactement?
Chani
tsocks est obsolète, la dernière mise à jour date de 2002. Il ne peut pas socksify yum / curl de nos jours. Utilisez danteplutôt. Sa commande est socksify app argssimilaire à tsocks. (et comme pour tsocks.conf pour la commande tsocks, vous avez également besoin de socks.conf pour la commande socksify). Cependant, pour socksify yum, je recommande la réponse de @Klaus. Modifier /etc/yum.conf est meilleur.
Bruce
17

Ajouter cette ligne à /etc/yum.conf(a eu l'idée du post par DaPillow)

proxy=socks5://ip:port

Dans le cas où la résolution du nom d'hôte via un proxy est nécessaire, grâce à Danny des commentaires, cela le fera:

proxy=socks5h://ip:port

Cela a fonctionné pour moi en utilisant yum 3.4.3 sur Fedora 21.

Klaus
la source
Cela ne fonctionne pas sur RHEL 2.6.32 (64Bit) avec yum 3.2.29: - | ProxyChains est tout à fait standard dans un tel but!
Jatin Kumar
les proxychains semblent assez justes. Je l'ai utilisé et j'en suis content;) Mais dans votre cas, je pense que la version yum est le problème: 3.2.29 (la mienne est 3.4.3)
Klaus
Oui, c'est juste la version yum et 3.2.29 est la version par défaut de la version 6.5 finale.
Jatin Kumar
Fonctionne sur RHEL7 / CentOS7 (miam 3.4.3).
Sam Hartsfield
Cela devrait être la réponse acceptée!
Danny Goossen du
7

Comme indiqué par enzitib, tsockspeut être utilisé pour utiliser un proxy SOCKS avec yum.

Pour être plus détaillé, on peut l'utiliser comme ceci:

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

Par défaut, tsocks utilise SOCKS version 4 - mais vous pouvez configurer 5 via la directive 'server_type'. Pour les options utilisateur / mot de passe, il existe les directives 'default_user' / 'default_pass' et les variables d'environnement TSOCKS_USERNAME / TSOCKS_PASSWORD.

maxschlepzig
la source
5

J'utilise CentOS6.x avec yum-3.2.29-81, curl / libcurl 7.19.7-53 et j'ai ce même problème. J'ai des serveurs yum derrière un pare-feu et je veux utiliser yum sur une configuration de proxy SOCKS5 en utilisant ssh. Idéalement, je veux le faire sans avoir besoin de tsocks, de proxychains ou de tout autre utilitaire de "socksification".

J'ai configuré la connexion SOCKS5 en utilisant:

ssh -D 40000 dmz-server

J'ai fouillé dans les sources de python yum et j'ai vu qu'elles utilisaient pycurl qui enveloppe libcurl (veuillez également noter que toutes les variables d'environnement proxy - http_proxy, HTTP_PROXY, all_proxy, ALL_PROXY, etc. - étaient initialement indéfinies). De plus, j'ai vérifié que ~ / .curlrc était vide, donc cela n'a pas entaché mes résultats de test.

Je voulais voir si je pouvais obtenir curl pour parler via le proxy socks5:

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

a renvoyé avec succès la page Web distante, donc c'était un bon signe - montrant que libcurl peut utiliser les proxys SOCKS5. Cependant, définir une variable d'environnement

http_proxy=socks5://127.0.0.1:40000 

n'était pas suffisant:

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

échoué.

À ce stade, je suis passé à l'utilisation d'un programme de test 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()

Maintenant, en cours d'exécution

./test.py

ne parviendra pas à récupérer, mais en cours d'exécution

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

va chercher avec succès http: // some-serveur / some-url . Il me semble donc que cette combinaison (certes ancienne) yum / libcurl livrée avec CentOS6 ne définit pas correctement le type de proxy dans libcurl. Je pense que ce qui se passe, c'est que le PROXYTYPE utilise par défaut un proxy HTTP standard au lieu d'identifier le schéma socks5: // dans l'URL spécifiée dans la variable d'environnement http_proxy .

Dans tous les cas, le correctif suivant vers /usr/lib/python2.6/site-packages/urlgrabber/grabber.py a fonctionné pour me permettre d'accéder aux référentiels http: // yum via un proxy SOCKS5. Dans PyCurlFileObject # _set_opts (self, opts = {}), ajoutez:

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)

autour de la ligne 1205, juste avant

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

Avec ce changement,

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

se connecte avec succès à tous mes référentiels http: // yum de l'autre côté du pare-feu via le proxy SOCKS5 ssh.

Bien sûr, on pourrait exporter la variable d'environnement http_proxy dans son shell pour éviter de la spécifier avant chaque appel de yum .

Chat Citron
la source
1

Proxychaines est également une bonne option pour vous!

téléchargez-le d'abord et définissez vos informations de chaussettes dans un proxychains.conffichier et entrez proxyxhanesavant toute commande que vous souhaitez utiliser le proxy de chaussettes!

Milad Sobhkhiz
la source
1

Ajoutez cette ligne à /etc/yum.confet assurez-vous d'utiliser le protocole attendu (pas http):

...    
proxy=socks5h://localhost:1080
...
Ramesh
la source
5
Cela ne fonctionne pas:Options Error: Error parsing "proxy = "socks5h://abc.mnl.xyz.com:9999/ # "": URL must be http, ftp or https not "socks5h"
Chani