Jak zaktualizować Ruby Gems zza serwera proxy (ISA-NTLM)

232

Zapora sieciowa, za którą pracuję, działa na serwerze Microsoft ISA w trybie tylko NTLM. Czy ktoś ma sukces w zdobywaniu klejnotów Ruby do zainstalowania / aktualizacji za pomocą klejnotu Ruby SSPI lub innej metody?

... czy jestem po prostu leniwy?

Uwaga: rubysspi-1.2.4 nie działa.

Działa to również w przypadku „igem”, części projektu IronRuby

Brett Veenstra
źródło
Mam rubysspi do pracy, ale wymagane jest wiele majstrowania. Jeśli chcesz użyć go z powłoki Git Bash, musisz dodać alias do pliku .bashrc, taki jak ten:alias gem='ruby -rspa `which gem`'
iconoclast
1
Jeśli masz problemy z serwerem proxy po wykonaniu kroków opisanych w większości tych odpowiedzi, spróbuj upewnić się, że sudoma dostęp do zmiennych środowiskowych, dodając -Eprzełącznik, np.sudo -E doSomething
kayleeFrye_onDeck

Odpowiedzi:

214

Nie mogłem uruchomić mojej z przełącznika wiersza poleceń, ale mogłem to zrobić, ustawiając moją HTTP_PROXYzmienną środowiskową. (Pamiętaj, że sprawa wydaje się być ważna). Mam plik wsadowy, który zawiera taką linię:

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

Ustawiłem cztery zmienne, do których się odwołuję, zanim oczywiście przejdę do tego wiersza. Na przykład, jeśli moja nazwa użytkownika to „wolfbyte”, moje hasło jest „tajne”, a mój serwer proxy nazywa się „pigsy” i działa na porcie 8080:

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

Możesz być ostrożny, jak sobie z tym poradzić, ponieważ przechowuje twoje hasło w postaci zwykłego tekstu w sesji komputera, ale nie sądzę, że powinno to stanowić zbyt duży problem.

Mike Minutillo
źródło
6
Wygląda na to, że „gem” nie rozpoznaje odwrotnych ukośników w ciągu proxy, czy to przez argument http_proxy env var, czy --http-proxy. np. z mojego okna Ubuntu - http-// http: // domena \\ identyfikator_użytkownika @ serwer: port wyświetla błąd: „niepoprawny argument: - http-proxy ...”; Na szczęście mój serwer proxy nie wymagał specyfikacji domeny, a gem działał bez niego.
spoulson
ISA pozwala administratorowi określić domyślną domenę do uwierzytelnienia. Możesz spróbować opuścić domenę i po prostu użyć swojej nazwy użytkownika, jak sugeruje Spoulson. Jeśli administrator ISA określił wspomnianą domyślną domenę, a twoje konto użytkownika jest w tej domenie, powinno to działać dla ciebie (zakładając, że nie ma reguł blokujących zaporę)
squillman 16.06.2009
11
@spoulson Jeśli potrzebujesz domeny, musisz zakodować ukośnik odwrotny URI, np. http: // domain% 5Cuserid @ server: port.
Ian G
13
Do Twojej wiadomości, w Windows możesz dodać zestaw http_proxy do gem.bat, abyś nie musiał pamiętać, aby ustawić proxy za każdym razem.
Ed Manet,
1
Nawiasem mówiąc, jeśli twoje hasło zawiera specjalne symbole, powinieneś je zakodować. Np zastąpić @z %40etc
Andrey Regentov
221

W przypadku systemu operacyjnego Windows skorzystałem z narzędzia Fiddler, aby obejść ten problem.

  1. Zainstaluj / Uruchom Fiddler z www.fiddler2.com
  2. Uruchom klejnot:

    $ gem install --http-proxy http://localhost:8888 $gem_name
Peter Moresi
źródło
3
Działa uczta, znacznie łatwiej niż ntlmaps i cntlm.
atomicules
36
To zadziałało dla mnie. Pamiętaj, że skrzypek nie jest potrzebny we wszystkich sytuacjach. Tylko gem install --http-proxy http://COMPANY.PROXY.ADDRESS $gem_nametyle było mi potrzebne.
Polaris878
W systemie Windows 7 flaga --http-proxy musi następować po nazwie gem, np. Gem install <nazwa gracza> --http-proxy twójproxy.address; port . W przeciwnym razie będzie narzekać na nieprawidłowy przełącznik wiersza polecenia.
Alek Davis
Działa w systemie Windows 10
ggiunta
To działało dla mnie za korporacyjnym proxy. Nie potrzeba skrzypka. Na przykład, aby zainstalować klejnot jekyll, po prostu uruchom: sudo gem install jekyll --http-proxy=http://web-proxy.company.com:8080
Joseph
129

To całkowicie zadziałało:

gem install --http-proxy http://COMPANY.PROXY.ADDRESS $gem_name
SethRocker
źródło
15
To najbardziej aktualna odpowiedź, działa również z systemem Windows. Musiałem jednak dodać moją nazwę użytkownika i hasło: gem install --http-proxy http: // [ użytkownik ]: [ hasło ] @ [ serwer ]: [ port ]
vanderwyst
Nie mogłem zainstalować jekyll i ciągle dostawałem 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). To zadziałało dla mniegem install --http-proxy http://127.0.0.1:8580 jekyll
Majida Fouladpoura
Dodałem alias do mojego profilu bash: alias geminstall='gem install --http-proxy ${http_proxy}'aby ułatwić mi życie.
bgStack15
48

Korzystam z cntlm ( http://cntlm.sourceforge.net/ ) w pracy. Konfiguracja jest bardzo podobna do ntlmaps.

Działa świetnie, a także pozwala mi podłączyć moje urządzenie Ubuntu do serwera proxy ISA.

Sprawdź http://cntlm.wiki.sourceforge.net/, aby uzyskać więcej informacji

Jason Navarrete
źródło
2
To najmniej bolesny sposób ze wszystkich próbowanych. Na Ubuntu / Debian wykonuję apt-get install cntlm, edytuję config, a następnie eksportuję http_proxy = " localhost: 3128 ". Pracuje!
Konrads,
Działa doskonale również w systemie Windows. Dzięki!
Subrat Pattnaik
38

Wypróbowałem niektóre z tych rozwiązań i żadne z nich nie działało. W końcu znalazłem rozwiązanie, które działa dla mnie:

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

za pomocą -pparametru, aby przekazać proxy. Używam wersji Gem 1.9.1.

kfox
źródło
1
Przeszedł instalację, zamieniając część proxy na nazwę użytkownika: hasło @ proxy_ip: proxyport
Gary Tsui
Musiałem dodać, proxy_ipże jest używany do httpspołączeń, aby działać! Świetnie: D (wersja klejnotowa 2.0.14)
madlymad,
18

Utwórz plik .gemrc (w / etc / gemrc lub ~ / .gemrc lub na przykład z gem gem w / opt / chef / embedded / etc / gemrc) zawierający:

http_proxy: http://proxy:3128

Więc możesz gem installjak zwykle.

lukapiske
źródło
Jeśli działa przy użyciu pliku, --http-proxyale nie z .gemrcplikiem, może pochodzić z sudokonfiguracji. Musiałem sprawdzić /etc/sudoersplik, aby dodać: Defaults env_keep = "http_proxy ftp_proxy"przed:Defaults env_reset
DependencyHell
16

To doskonale rozwiązało mój problem:

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

Może być konieczne dodanie do niego nazwy użytkownika i hasła:

gem install -p http://[username]:[password]@proxy_ip:proxy_port compass
HomTom
źródło
11

Jeśli masz problemy z uwierzytelnieniem przez serwer proxy, ustaw zmienne środowiskowe dokładnie w poniższym formacie:

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

The user:password@Składnia nie wydaje się do pracy i tam są również niektóre źle nazwane zmienne środowiskowe pływających wokół na przepełnienie stosu i różnych postów.

Pamiętaj też, że pobranie klejnotów może chwilę potrwać. Na początku myślałem, że to nie działa, ale przy odrobinie cierpliwości zaczęli pobierać zgodnie z oczekiwaniami.

Benjamin Wootton
źródło
Biorąc wskazówkę Benjamina Woottona sprawdził się doskonale na moim laptopie z systemem Windows 7 podłączonym do korporacyjnej sieci LAN. W oknie wiersza poleceń w wierszu polecenia DOS ustawiłem HTTP_PROXY jako http: // localhost: 8888 (zignoruj ​​spacje), a następnie użyłem mojej nazwy użytkownika LAN i hasła odpowiednio dla HTTP_PROXY_USER i HTTP_PROXY_PASS.
raycarr
8

Wypróbowałem wszystkie powyższe rozwiązania, jednak żadne z nich nie działało. Jeśli korzystasz z systemu Linux / macOS, zdecydowanie zalecam używanie tsocks w tunelu ssh. Aby uruchomić tę konfigurację, potrzebujesz komputera, na którym możesz zalogować się przez ssh, a ponadto zainstalowany jest program o nazwie tsocks.

Chodzi tutaj o stworzenie dynamicznego tunelu za pośrednictwem SSH (proxy socks5). Następnie konfigurujemy tsocks do korzystania z tego tunelu i uruchamiania naszych aplikacji, w tym przypadku:

tsocks gem install ...

lub w celu uwzględnienia szyn 3.0:

tsocks bundle install

Bardziej szczegółowy przewodnik można znaleźć pod:

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

Mimo że napisano dla Ubuntu, procedura powinna mieć zastosowanie do wszystkich maszyn opartych na Uniksie. Alternatywą dla tsocks dla Windows jest FreeCap ( http://www.freecap.ru/eng/ ). Realny klient SSH w systemie Windows nazywa się kitem.

Christian F.
źródło
Artykuł znalazłem w moich kopiach zapasowych i właśnie opublikowałem go ponownie pod tym samym adresem URL.
ByScripts
1
Adres URL jest nadal niedostępny. Udostępniając link do zewnętrznej witryny bez stosu Exchange, streść tutaj najistotniejsze części i przypisz kredyt tej stronie. W ten sposób, gdy link się zepsuje, ważna część wciąż tu jest.
Tin Man
7

Jest mnóstwo postów na ten temat i aby pomóc innym zaoszczędzić godziny próbowania różnych rozwiązań, oto końcowy rezultat moich godzin majsterkowania.

Obecnie dostępne są trzy rozwiązania w Internecie: rubysspi apserver cntlm

Rubysspi działa tylko z komputera z systemem Windows, AFAIK, ponieważ opiera się na bibliotece Win32Api. Więc jeśli używasz Windowsa i próbujesz uruchomić proxy, jest to rozwiązanie dla ciebie. Jeśli korzystasz z dystrybucji Linuksa, nie masz szczęścia.

apserver wydaje się martwym projektem. Link wymieniony w postach, które widziałem, prowadzi do strony 404 w sourceforge. Poszukuję „apserver” na sourceforge nic nie zwraca.

Link do sourceforge dla cntlm, który widziałem, przekierowuje na http://cntlm.awk.cz/ , ale to się skończyło. Wyszukiwanie w sourceforge pokazuje ten link, który działa: http://sourceforge.net/projects/cntlm/

Po pobraniu i skonfigurowaniu cntlm udało mi się zainstalować klejnot przez proxy, więc wydaje się, że jest to najlepsze rozwiązanie dla dystrybucji Linuksa.


źródło
6

Szybka odpowiedź: dodaj konfigurację proxy z parametrem zarówno dla instalacji / aktualizacji

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

gem update --http-proxy http://host:port/ package_name
Shantonu
źródło
5
Dodając odpowiedź do starszego pytania z istniejącymi odpowiedziami, warto wyjaśnić, co dodaje nowa odpowiedź.
Jason Aller
określić polecenie bezpośrednio bez szczegółów czytając wszystkie szczegóły (szybkie odpowiedzi)
Shantonu
i ustawienie zmiennej środowiskowej nie jest opcją dla wszystkich (gdy wykonasz tylko jedną aktualizację czasową)
Shantonu
Dodaj wszystkie wyjaśnienia do samej odpowiedzi, a nie do sekcji komentarzy
Nico Haase,
5

Obejściem tego problemu jest zainstalowanie http://web.archive.org/web/20060913093359/http://apserver.sourceforge.net:80/ na komputerze lokalnym, skonfigurowanie go i uruchomienie klejnotów za pośrednictwem tego serwera proxy.

  • Zainstaluj: wystarczy pobrać apserver 097 (a nie eksperymentalny 098!) I rozpakować.
  • Konfiguruj: Edytuj plik server.cfg i wprowadź wartości dla swojego proxy MS w PARENT_PROXYi PARENT_PROXY_PORT. Wprowadź wartości dla DOMAIN i USER. Pozostaw HASŁO puste (nic po dwukropku) - podczas uruchamiania pojawi się monit.
  • Uruchom apserver: cd aps097; python main.py
  • Uruchom klejnoty: gem install—http-proxy http://localhost:5865/ library
Jarin Udom
źródło
5
Czytaj w grupie google, że „apserver” to teraz „Serwer autoryzacji NTLM”; szkoda, że ​​wyszukiwanie tego pierwszego nie przekierowuje do tego drugiego.
Darren Bishop
Cześć Jarin. Poszedłem do linku podanego w komentarzu i nie mogłem znaleźć tego pliku do pobrania. Czy mogę go pobrać z dowolnego miejsca?
Matrich
1
@Matrich zgodnie z komentarzem Darrena. apserver został teraz przemianowany i znaleziony tutaj: ntlmaps.sourceforge.net
atomicules
4

Pracuję za serwerem proxy i właśnie zainstalowałem SASS, pobierając bezpośrednio z http://rubygems.org .

Wtedy pobiegłem sudo gem install [path/to/downloaded/gem/file]. Nie mogę powiedzieć, że to zadziała dla wszystkich klejnotów, ale może pomóc niektórym ludziom.

Zander
źródło
3

Działa to dla mnie w pudełku Windows:

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

Mam plik wsadowy z tymi liniami, których używam do ustawiania wartości środowiska, kiedy go potrzebuję.

Sztuką, w moim przypadku, były HTTPS_PROXYsety. Bez nich zawsze pojawia się błąd uwierzytelnienia proxy 407.

Pedro García Vigil
źródło
3

Jeśli korzystasz z systemu * nix, użyj tego:

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

a następnie spróbuj:

gem install ${gem_name}
Saikrishna Rao
źródło
1

Jeśli masz serwer proxy, możesz przejść do pobierania Ruby , kliknij Pobierz, co spowoduje pobranie określonej aktualizacji (lub klejnotu) do wybranej lokalizacji.

Następnie za pomocą wiersza polecenia Ruby przejdź do pobranej lokalizacji, używając: pushd [directory]

np .: pushd D:\Setups

następnie uruchom następujące polecenie: gem install [update name] --local

np gem install rubygems-update --local. :

Testowane w systemie Windows 7 z aktualizacją Ruby w wersji 2.4.1.

Aby to sprawdzić, użyj następującego polecenia: ruby -v

ArNumb
źródło
1

Zamiast edytować pliki wsadowe (które możesz zrobić dla innych klejnotów Ruby, np. Bundlera), prawdopodobnie lepiej to zrobić raz i zrobić to poprawnie.

W systemie Windows, za moim korporacyjnym proxy, wszystko, co musiałem zrobić, to dodać HTTP_PROXYzmienną środowiskową do mojego systemu.

  1. Start -> kliknij prawym przyciskiem myszy Komputer -> Właściwości
  2. Wybierz „Zaawansowane ustawienia systemu”
  3. Kliknij Zaawansowane -> Zmienne środowiskowe
  4. Utwórz nową zmienną systemową o nazwie „ HTTP_PROXY” i ustaw wartość na serwerze proxy
  5. Uruchom ponownie lub wyloguj się i ponownie zaloguj

W zależności od wymagań uwierzytelnienia HTTP_PROXYwartość może być tak prosta, jak:

http://proxy-server-name

Lub bardziej skomplikowane, jak zauważyli inni

http://username:password@proxy-server-name:port-number
prace testowe
źródło
0

dla każdego tunelującego za pomocą SSH; możesz utworzyć wersję gempolecenia korzystającego z serwera proxy SOCKS:

  1. Zainstaluj za socksifypomocągem install socksify (musisz być w stanie wykonać ten krok przynajmniej bez proxy)
  2. Skopiuj swój istniejący klejnot exe

    cp $(command which gem) /usr/local/bin/proxy_gem
  3. Otwórz go w swoim ulubionym edytorze i dodaj to u góry (po shebang)

    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. Skonfiguruj swój tunel

    ssh -D 8123 -f -C -q -N user@proxy
  5. Uruchom polecenie gem z proxy_gem

    SOCKS_PROXY=localhost:8123 proxy_gem push mygem
Mike Campbell
źródło