Wie benutzt man SOCKS Proxy mit yum?

13

Die Manpage zu yum.conf beschreibt verschiedene Proxy-bezogene Variablen:

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

Aber wie spezifiziere ich einen SOCKS-Proxy?

Ich gehe davon aus, dass dies nur für normale HTTP-Proxys gilt ...

maxschlepzig
quelle

Antworten:

3

Die tsocksAnwendung kann alle anderen Anwendungen socken

tsocks app args
Enzotib
quelle
Genial, es ist bereits in den Standard-Fedora-Repositories verfügbar - über Google habe ich gerade 'socksify' (dante socks client) gefunden, das nicht verfügbar ist - und es funktioniert nicht auf Fedora 17, wenn es aus dem Quellcode kompiliert wird.
Maxschlepzig
Wie man es genau benutzt?
Chani
tsocks ist veraltet, das neueste Update stammt aus dem Jahr 2002. Heutzutage kann es keine Socken mehr machen. Verwenden Sie dantestattdessen. Sein Befehl ist socksify app argsähnlich wie bei tsocks. (und genauso wie tsocks.conf für den Befehl tsocks, benötigen Sie auch socks.conf für den Befehl socksify). Um jedoch zu socksify yum, ich empfehlen @Klaus ‚s Antwort. Ändern Sie /etc/yum.conf ist besser.
Bruce
17

Füge diese Zeile hinzu zu /etc/yum.conf(ich habe die Idee aus dem Beitrag von DaPillow)

proxy=socks5://ip:port

Falls die Auflösung des Hostnamens über einen Proxy erforderlich sein sollte, würde dies dank Danny aus den Kommentaren wie folgt aussehen:

proxy=socks5h://ip:port

Es hat bei mir mit yum 3.4.3 auf Fedora 21 funktioniert.

Klaus
quelle
Es funktioniert nicht auf RHEL 2.6.32 (64Bit) mit yum 3.2.29: - | ProxyChains ist für einen solchen Zweck durchaus Standard!
Jatin Kumar
Proxy-Ketten scheint fair genug. Ich habe es benutzt und freue mich darüber;) Aber in deinem Fall denke ich, dass die Yum-Version das Problem ist: 3.2.29 (meine ist 3.4.3)
Klaus
Ja, das stimmt, es ist nur die yum-Version und 3.2.29 ist die Standardversion für 6.5 Final Release.
Jatin Kumar
Funktioniert auf RHEL7 / CentOS7 (yum 3.4.3).
Sam Hartsfield
Dies sollte die akzeptierte Antwort sein!
Danny Goossen
7

Wie von enzitib hervorgehoben, tsockskann ein SOCKS-Proxy mit verwendet werden yum.

Um genauer zu sein, kann man es so benutzen:

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

Standardmäßig verwendet tsocks SOCKS Version 4 - Sie können jedoch 5 über die Anweisung 'server_type' konfigurieren. Für Benutzer- / Kennwortoptionen gibt es die Direktiven 'default_user' / 'default_pass' und die Umgebungsvariablen TSOCKS_USERNAME / TSOCKS_PASSWORD.

maxschlepzig
quelle
4

Ich verwende CentOS6.x mit yum-3.2.29-81, curl / libcurl 7.19.7-53 und habe das gleiche Problem. Ich habe YUM-Server hinter einer Firewall und möchte YUM über ein SOCKS5-Proxy-Setup mit SSH verwenden. Im Idealfall möchte ich dies tun, ohne T-Socks, Proxy-Ketten oder andere "Socksification" -Dienstprogramme zu benötigen.

Ich richte die SOCKS5-Verbindung ein mit:

ssh -D 40000 dmz-server

Ich stöberte in den YUM-Python-Quellen herum und sah, dass sie Pycurl verwenden, das Libcurl umschließt. Außerdem habe ich überprüft, dass ~ / .curlrc leer ist, damit meine Testergebnisse nicht beeinträchtigt werden.

Ich wollte sehen, ob ich Curl dazu bringen könnte, über den socks5-Proxy zu sprechen:

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

erfolgreich zurückgegeben die Remote - Web - Seite, so dass ein gutes Zeichen - zeigt libcurl kann SOCKS5 Proxies verwenden. Definieren Sie jedoch eine Umgebungsvariable

http_proxy=socks5://127.0.0.1:40000 

war nicht genug:

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

gescheitert.

Zu diesem Zeitpunkt wechselte ich zu einem Python-Testprogramm 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()

Jetzt renn

./test.py

wird nicht abrufen, aber ausgeführt

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

wird erfolgreich http: // some-server / some-url holen . Aus diesem Grund scheint mir diese (zugegebenermaßen uralte) Kombination aus yum und libcurl, die im Lieferumfang von CentOS6 enthalten ist, den Proxy-Typ in libcurl nicht korrekt einzustellen. Ich denke, was passiert ist, dass der PROXYTYPE standardmäßig einen Standard-HTTP-Proxy verwendet, anstatt das Schema socks5: // in der URL zu identifizieren, die in der Umgebungsvariablen http_proxy angegeben ist.

Mit dem folgenden Patch für /usr/lib/python2.6/site-packages/urlgrabber/grabber.py konnte ich auf jeden Fall über einen SOCKS5-Proxy auf http: // yum-Repositorys zugreifen. Fügen Sie in PyCurlFileObject # _set_opts (self, opts = {}) Folgendes hinzu:

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)

um die Linie 1205 herum, direkt davor

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

Mit dieser Änderung

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

stellt über den SOCKS5-SSH-Proxy erfolgreich eine Verbindung zu allen meinen http: // yum-Repositorys auf der anderen Seite der Firewall her.

Natürlich kann man die Umgebungsvariable http_proxy innerhalb der eigenen Shell exportieren , um zu vermeiden, dass sie vor jedem Aufruf von yum angegeben wird .

Zitronen-Katze
quelle
1

Proxychaines Auch ist eine gute Option für Sie!

Laden Sie es zuerst herunter und legen Sie Ihre Socken-Informationen in der proxychains.confDatei fest. Geben Sie proxyxhanesvor jedem Befehl, den Sie verwenden möchten, den Socken-Proxy ein!

Milad Sobhkhiz
quelle
1

Fügen Sie diese Zeile hinzu /etc/yum.confund stellen Sie sicher, dass Sie das erwartete Protokoll (nicht http) verwenden:

...    
proxy=socks5h://localhost:1080
...
Ramesh
quelle
5
Dies funktioniert nicht:Options Error: Error parsing "proxy = "socks5h://abc.mnl.xyz.com:9999/ # "": URL must be http, ftp or https not "socks5h"
Chani