Wie aktualisiere ich Ruby Gems hinter einem Proxy (ISA-NTLM)?


232

Die Firewall, hinter der ich stehe, führt den Microsoft ISA-Server im Nur-NTLM-Modus aus. Hat jemand Erfolg damit, dass seine Ruby-Edelsteine ​​über Ruby-SSPI-Edelsteine ​​oder eine andere Methode installiert / aktualisiert werden?

... oder bin ich nur faul?

Hinweis: rubysspi-1.2.4 funktioniert nicht.

Dies funktioniert auch für "igem", Teil des IronRuby-Projekts


Ich habe Rubysspi zum Arbeiten gebracht, aber es ist viel Fummeln erforderlich. Wenn Sie es von einer Git Bash-Shell aus verwenden möchten, benötigen Sie einen Alias, der Ihrer .bashrc-Datei hinzugefügt wird, wie zum Beispiel:alias gem='ruby -rspa `which gem`'
iconoclast

1
Wenn Sie Proxy-Probleme haben, nachdem Sie die Schritte in den meisten dieser Antworten ausgeführt haben, stellen Sie sicher, dass Sie sudoZugriff auf Ihre Umgebungsvariablen haben, indem Sie den -ESchalter hinzufügen , z. B.sudo -E doSomething
kayleeFrye_onDeck

Antworten:


214

Ich konnte meine nicht über den Befehlszeilenschalter zum Laufen bringen, aber ich konnte dies nur durch Festlegen meiner HTTP_PROXYUmgebungsvariablen tun . (Beachten Sie, dass der Fall wichtig zu sein scheint). Ich habe eine Batch-Datei mit einer Zeile wie dieser:

SET HTTP_PROXY=http://%USER%:%PASSWORD%@%SERVER%:%PORT%

Ich habe die vier referenzierten Variablen festgelegt, bevor ich offensichtlich zu dieser Zeile komme. Wenn mein Benutzername beispielsweise "wolfbyte" ist, mein Passwort "geheim" ist und mein Proxy "pigsy" heißt und auf Port 8080 ausgeführt wird:

SET HTTP_PROXY=http://wolfbyte:secret@pigsy:8080

Vielleicht möchten Sie vorsichtig sein, wie Sie das verwalten, da Ihr Kennwort in der Sitzung des Computers im Klartext gespeichert wird, aber ich denke nicht, dass dies ein zu großes Problem sein sollte.


6
Es scheint, dass 'gem' Backslashes in der Proxy-Zeichenfolge nicht erkennt, sei es durch das Argument http_proxy env var oder --http-proxy. zB von meiner Ubuntu-Box --http-proxy http: // domain \\ userid @ server: port gibt mir den Fehler: "ungültiges Argument: --http-proxy ..."; Glücklicherweise benötigte mein Proxyserver die Domain-Spezifikation nicht und gem funktionierte ohne sie.
Spoulson

Mit ISA kann der Administrator eine Standarddomäne angeben, bei der er sich authentifizieren möchte. Sie können versuchen, die Domain wegzulassen und einfach Ihren Benutzernamen zu verwenden, wie es Spoulson vorschlägt. Wenn Ihr ISA-Administrator diese Standarddomäne angegeben hat und sich Ihr Benutzerkonto in dieser Domäne befindet, sollte dies für Sie funktionieren (vorausgesetzt, es gibt keine Blockierungsregeln für die Firewall)
squillman

11
@spoulson Sie müssen den Backslash URI-codieren, wenn Sie die Domain benötigen, z. B. http: // domain% 5Cuserid @ server: port.
Ian G

13
Zu Ihrer Information, unter Windows können Sie gem.bat die Zeile set http_proxy hinzufügen, damit Sie nicht jedes Mal daran denken müssen, den Proxy festzulegen.
Ed Manet

1
Wenn Ihr Passwort spezielle Symbole enthält, sollten Sie diese übrigens mit einem Urlencode versehen. Zum Beispiel ersetzen @mit %40etc
Andrey Regentov

221

Für das Windows-Betriebssystem habe ich Fiddler verwendet, um das Problem zu umgehen.

  1. Installieren / Ausführen von Fiddler von www.fiddler2.com
  2. Edelstein ausführen:

    $ gem install --http-proxy http://localhost:8888 $gem_name

3
Arbeitete ein Vergnügen, viel einfacher als ntlmaps und cntlm.
Atomicules

36
Das hat bei mir funktioniert. Beachten Sie, dass Fiddler nicht in allen Situationen benötigt wird. Nur gem install --http-proxy http://COMPANY.PROXY.ADDRESS $gem_nameist alles was für mich gebraucht wurde.
Polaris878

Unter Windows 7 muss das Flag --http-proxy nach dem Gem-Namen stehen, z. B. gem install <gemaname> --http-proxy yourproxy.address; port . Andernfalls wird ein ungültiger Befehlszeilenschalter beanstandet.
Alek Davis

Funktioniert unter Windows 10
ggiunta

Dies hat für mich hinter einem Corporate Proxy funktioniert. Kein Geiger nötig. Zum Beispiel, um Jekyll Gem zu installieren, laufen Sie einfach: sudo gem install jekyll --http-proxy=http://web-proxy.company.com:8080
Joseph

129

Das hat total geklappt:

gem install --http-proxy http://COMPANY.PROXY.ADDRESS $gem_name

15
Dies ist die aktuellste Antwort, sie funktioniert auch mit Windows. Ich musste jedoch meinen Benutzernamen und mein Passwort hinzufügen: gem install --http-proxy http: // [ Benutzer ]: [ Passwort ] @ [ Server ]: [ Port ]
vanderwyst

Ich konnte Jekyll nicht installieren und bekam es immer wieder SSL_connect SYSCALL returned=5 errno=0 state=unknown state (https://rubygems.global.ssl.fastly.net/quick/Marshal.4.8/jekyll-3.0.0.gemspec.rz). Dies funktionierte für mich mitgem install --http-proxy http://127.0.0.1:8580 jekyll
Majid Fouladpour

Ich habe meinem Bash-Profil einen Alias ​​hinzugefügt alias geminstall='gem install --http-proxy ${http_proxy}', um mir das Leben zu erleichtern.
bgStack15

48

Ich habe cntlm ( http://cntlm.sourceforge.net/ ) bei der Arbeit verwendet. Die Konfiguration ist ntlmaps sehr ähnlich.

Funktioniert hervorragend und ermöglicht mir auch, meine Ubuntu-Box mit dem ISA-Proxy zu verbinden.

Weitere Informationen finden Sie unter http://cntlm.wiki.sourceforge.net/


2
Dies ist der am wenigsten schmerzhafte Weg aller Versuche. Unter Ubuntu / Debian installiere ich apt-get cntlm, bearbeite die Konfiguration und exportiere dann http_proxy = " localhost: 3128 ". Funktioniert!
Konrads

Funktioniert auch perfekt unter Windows. Vielen Dank!
Subrat Pattnaik

38

Ich habe einige dieser Lösungen ausprobiert, und keine davon hat funktioniert. Ich habe endlich eine Lösung gefunden, die für mich funktioniert:

gem install -p http://proxy_ip:proxy_port rails

Verwenden des -pParameters zum Übergeben des Proxys. Ich verwende Gem Version 1.9.1.


1
Ich habe die Installation durch Ersetzen des Proxy-Teils durch den Benutzernamen: password @ proxy_ip: proxyport
Gary Tsui

Ich musste das hinzufügen proxy_ip, das für httpsVerbindungen verwendet wird, um zu arbeiten! Großartig: D (Edelsteinversion 2.0.14)
Madlymad

18

Erstellen Sie eine .gemrc-Datei (entweder in / etc / gemrc oder ~ / .gemrc oder zum Beispiel mit chef gem in / opt / chef / embedded / etc / gemrc), die Folgendes enthält:

http_proxy: http://proxy:3128

Dann kannst du gem installwie gewohnt.


Wenn es --http-proxymit einer .gemrcDatei funktioniert, aber nicht mit einer Datei, kann dies aus der sudoKonfiguration stammen. Ich musste die /etc/sudoersDatei überprüfen, um Folgendes hinzuzufügen: Defaults env_keep = "http_proxy ftp_proxy"Vorher:Defaults env_reset
DependencyHell

16

Dies hat mein Problem perfekt gelöst:

gem install -p http://proxy_ip:proxy_port compass

Möglicherweise müssen Sie Ihren Benutzernamen und Ihr Kennwort hinzufügen:

gem install -p http://[username]:[password]@proxy_ip:proxy_port compass

11

Wenn Sie Probleme haben, sich über Ihren Proxy zu authentifizieren, stellen Sie sicher, dass die Umgebungsvariablen genau das folgende Format haben:

set HTTP_PROXY=some.proxy.com
set HTTP_PROXY_USER=user
set HTTP_PROXY_PASS=password

Die user:password@Syntax scheint nicht zu funktionieren und es gibt auch einige schlecht benannte Umgebungsvariablen, die in Stack Overflow und verschiedenen Forenbeiträgen herumschwirren.

Beachten Sie auch, dass es eine Weile dauern kann, bis Ihre Edelsteine ​​heruntergeladen werden. Zuerst dachte ich, es würde nicht funktionieren, aber mit etwas Geduld begannen sie wie erwartet mit dem Herunterladen.


Der Tipp von Benjamin Wootton hat auf meinem Windows 7-Laptop, der mit dem Unternehmens-LAN verbunden ist, hervorragend funktioniert. Im Befehlszeilenfenster an der DOS-Eingabeaufforderung habe ich HTTP_PROXY als http: // localhost: 8888 festgelegt (Leerzeichen ignorieren) und dann meinen LAN-Benutzernamen und mein Kennwort für HTTP_PROXY_USER bzw. HTTP_PROXY_PASS verwendet.
Raycarr

8

Ich habe alle oben genannten Lösungen ausprobiert, aber keine davon hat funktioniert. Wenn Sie unter Linux / MacOS arbeiten, empfehle ich dringend, Tsocks über einen SSH-Tunnel zu verwenden. Um dieses Setup zum Laufen zu bringen, benötigen Sie einen Computer, auf dem Sie sich über ssh anmelden können, und zusätzlich ein Programm namens tsocks installiert.

Die Idee hier ist, einen dynamischen Tunnel über SSH (einen socks5-Proxy) zu erstellen. Anschließend konfigurieren wir tsocks so, dass dieser Tunnel verwendet und unsere Anwendungen gestartet werden. In diesem Fall:

tsocks gem install ...

oder um Schienen 3.0 zu berücksichtigen:

tsocks bundle install

Eine ausführlichere Anleitung finden Sie unter:

http://blog.byscripts.info/2011/04/bypass-a-proxy-with-ssh-tunnel-and-tsocks-under-ubuntu/

Obwohl das Verfahren für Ubuntu geschrieben wurde, sollte es für alle Unix-basierten Computer gelten. Eine Alternative zu tsocks für Windows ist FreeCap ( http://www.freecap.ru/eng/ ). Ein funktionsfähiger SSH-Client unter Windows wird als Kitt bezeichnet.


Ich habe den Artikel in meinen Backups gefunden und ihn mit derselben URL erneut veröffentlicht.
ByScripts

1
Die URL ist immer noch nicht verfügbar. Wenn Sie einen Link zu einer externen Site ohne Stack Exchange bereitstellen, fassen Sie die wichtigsten Teile hier zusammen und geben Sie dieser Site eine Gutschrift. Auf diese Weise ist der wichtige Teil immer noch da, wenn die Verbindung unterbrochen wird.
der Blechmann

7

Zu diesem Thema gibt es zahlreiche Beiträge. Um anderen zu helfen, Stunden beim Ausprobieren verschiedener Lösungen zu sparen, ist hier das Endergebnis meiner stundenlangen Bastelarbeiten.

Die drei Lösungen im Internet sind derzeit: rubysspi apserver cntlm

rubysspi funktioniert nur auf einem Windows-Computer, AFAIK, da es auf der Win32Api-Bibliothek basiert. Wenn Sie sich also auf einer Windows-Box befinden und versuchen, über einen Proxy zu laufen, ist dies die Lösung für Sie. Wenn Sie in einer Linux-Distribution arbeiten, haben Sie kein Glück.

apserver scheint ein totes Projekt zu sein. Der Link in den Posts, die ich gesehen habe, führt zu einer 404-Seite auf sourceforge. Ich suche nach "apserver" auf sourceforge gibt nichts zurück.

Der SourceForge-Link für cntlm, den ich gesehen habe, leitet zu http://cntlm.awk.cz/ weiter , aber das läuft ab. Eine Suche in sourceforge zeigt diesen Link an, der funktioniert: http://sourceforge.net/projects/cntlm/

Nach dem Herunterladen und Konfigurieren von cntlm habe ich es geschafft, ein Juwel über den Proxy zu installieren, daher scheint dies die beste Lösung für Linux-Distributionen zu sein.


6

Schnelle Antwort: Fügen Sie eine Proxy-Konfiguration mit Parametern für Installation / Update hinzu

gem install --http-proxy http://host:port/ package_name

gem update --http-proxy http://host:port/ package_name

5
Wenn Sie eine Antwort auf eine ältere Frage mit vorhandenen Antworten hinzufügen, ist es hilfreich zu erklären, was Ihre Antwort neu hinzufügt.
Jason Aller

Befehl direkt ohne Detail zu spezifizieren Lesen aller Details (schnelle Antworten)
Shantonu

und das Festlegen von Umgebungsvariablen ist nicht für alle eine Option (wenn Sie nur ein einmaliges Update durchführen)
Shantonu

Bitte fügen Sie alle Erklärungen zur Antwort selbst hinzu, nicht zum Kommentarbereich
Nico Haase

5

Eine Problemumgehung besteht darin, http://web.archive.org/web/20060913093359/http://apserver.sourceforge.net:80/ auf Ihrem lokalen Computer zu installieren , zu konfigurieren und Gems über diesen Proxy auszuführen.

  • Installieren: Laden Sie einfach den Apserver 097 (und nicht den experimentellen 098!) Herunter und entpacken Sie ihn.
  • Konfigurieren: Bearbeiten Sie die Datei server.cfg und geben Sie die Werte für Ihren MS-Proxy ein PARENT_PROXY und ein PARENT_PROXY_PORT. Geben Sie die Werte für DOMAIN und USER ein. Lassen Sie PASSWORT leer (nichts nach dem Doppelpunkt) - Sie werden beim Starten aufgefordert.
  • Führen Sie apserver aus: cd aps097; python main.py
  • Run Gems: gem install—http-proxy http://localhost:5865/ library

5
Lesen Sie in einer Google-Gruppe, dass "apserver" jetzt "NTLM Authorization Server" ist. Schade, dass die Suche nach Ersterem nicht zu Letzterem umleitet.
Darren Bishop

Hallo Jarin, ich bin zu dem Link gegangen, den du in deinem Kommentar angegeben hast, und konnte diesen Download nicht finden. Kann ich es von irgendwo anders herunterladen?
Matrich

1
@ Matrich nach Darrens Kommentar. apserver ist jetzt umbenannt und hier zu finden: ntlmaps.sourceforge.net
atomicules

4

Ich arbeite hinter einem Proxy und habe gerade SASS installiert, indem ich es direkt von http://rubygems.org heruntergeladen habe .

Ich rannte dann sudo gem install [path/to/downloaded/gem/file]. Ich kann nicht sagen, dass dies für alle Edelsteine ​​funktioniert, aber es kann einigen Menschen helfen.


3

Dies funktionierte bei mir in einer Windows-Box:

set HTTP_PROXY=http://server:port
set HTTP_PROXY_USER=username
set HTTP_PROXY_PASS=userparssword
set HTTPS_PROXY=http://server:port
set HTTPS_PROXY_USER=username
set HTTPS_PROXY_PASS=userpassword

Ich habe eine Batchdatei mit diesen Zeilen, mit der ich bei Bedarf Umgebungswerte festlegen kann.

Der Trick in meinem Fall waren HTTPS_PROXYSätze. Ohne sie habe ich immer einen 407-Proxy-Authentifizierungsfehler erhalten.


3

Wenn Sie sich auf einem * nix-System befinden, verwenden Sie Folgendes:

export http_proxy=http://${proxy.host}:${port}
export https_proxy=http://${proxy.host}:${port}

und dann versuchen:

gem install ${gem_name}



1

Wenn Sie sich hinter einem Proxy befinden, können Sie zu Ruby-Downloads navigieren , klicken Sie auf Download, um das angegebene Update (oder Gem) an einen gewünschten Speicherort herunterzuladen.

Navigieren Sie anschließend über die Ruby-Befehlszeile zum heruntergeladenen Speicherort, indem Sie Folgendes verwenden: pushd [directory]

z.B : pushd D:\Setups

Führen Sie dann den folgenden Befehl aus: gem install [update name] --local

z.B: gem install rubygems-update --local .

Getestet unter Windows 7 mit Ruby Update Version 2.4.1.

Verwenden Sie zur Überprüfung den folgenden Befehl: ruby -v


1

Anstatt Batch-Dateien zu bearbeiten (die Sie möglicherweise für andere Ruby-Edelsteine, z. B. Bundler, ausführen müssen), ist es wahrscheinlich besser, dies einmal und ordnungsgemäß auszuführen.

Unter Windows musste ich hinter meinem Unternehmens-Proxy lediglich die HTTP_PROXYUmgebungsvariable zu meinem System hinzufügen .

  1. Start -> Rechtsklick Computer -> Eigenschaften
  2. Wählen Sie "Erweiterte Systemeinstellungen"
  3. Klicken Sie auf Erweitert -> Umgebungsvariablen
  4. Erstellen Sie eine neue Systemvariable mit dem Namen " HTTP_PROXY", und legen Sie den Wert für Ihren Proxyserver fest
  5. Starten Sie neu oder melden Sie sich ab und wieder an

Abhängig von Ihren Authentifizierungsanforderungen kann der HTTP_PROXYWert so einfach sein wie:

http://proxy-server-name

Oder komplexer, wie andere betont haben

http://username:password@proxy-server-name:port-number

0

für alle, die mit SSH tunneln; Sie können eine Version des gemBefehls erstellen, der den SOCKS-Proxy verwendet:

  1. Installieren socksifymit gem install socksify(Sie müssen diesen Schritt zumindest ohne Proxy ausführen können)
  2. Kopieren Sie Ihre vorhandene Edelstein-Exe

    cp $(command which gem) /usr/local/bin/proxy_gem
  3. Öffnen Sie es in Ihrem Lieblingseditor und fügen Sie es oben hinzu (nach dem Schebang)

    require 'socksify'
    
    if ENV['SOCKS_PROXY']
      require 'socksify'
      host, port = ENV['SOCKS_PROXY'].split(':')
      TCPSocket.socks_server = host || 'localhost'
      TCPSocket.socks_port = port.to_i || 1080
    end
  4. Richten Sie Ihren Tunnel ein

    ssh -D 8123 -f -C -q -N user@proxy
  5. Führen Sie Ihren gem-Befehl mit proxy_gem aus

    SOCKS_PROXY=localhost:8123 proxy_gem push mygem
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.