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


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.


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

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

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


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.


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.


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

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.


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.


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.


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

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

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.


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.


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}



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


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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.