Jak zainstalować NPM za serwerem proxy uwierzytelniania w systemie Windows?

30

Muszę uruchomić najnowszą wersję Node i NPM w systemie Windows. Zainstalowałem Node 0.5.8 i pobrałem źródła NPM z GitHub. Kroki, które wykonałem, aby zainstalować NPM, zostały wymienione w witrynie GitHub, ale mam problem z uruchomieniem następującego polecenia:

node cli.js install npm -gf

ale kończy się niepowodzeniem z następującym komunikatem o błędzie:

Error: connect UNKNOWN
at errnoException (net_uv.js:566:11)
at Object.afterConnect [as oncomplete] (net_uv.js:557:18)

System Windows_NT 5.1.2600
command "...\\Node\\bin\\node.exe" "...\\npm\\cli.js" "install" "npm" "-gf"
cwd ...\npm
node -v v0.5.8
npm -v 1.0.94
code UNKNOWN

Myślę, że jest to problem, ponieważ potrzebuję uwierzytelnienia na moim serwerze proxy, aby połączyć się z Internetem. Ale nie znalazłem sposobu, aby powiedzieć instalatorowi, aby używał moich danych logowania do logowania. Czy istnieje możliwość podania mojego adresu IP serwera proxy i danych logowania do instalacji npm za pomocą argumentów wiersza poleceń?

W razie potrzeby mogę podać pełny dziennik (ale wydaje się, że nie ma już żadnych istotnych informacji), używając pastebin.

Tobiasz
źródło
6
Trochę sztuczki, jeśli nazwa użytkownika zawiera notację domena \ użytkownik,
@layos Dziękuję bardzo. Gdyby to był reddit, dałbym ci złoto.
Korinna

Odpowiedzi:

39

set http_proxydziałał dla mnie naprawdę dobrze, ale musiałem go wprowadzać za każdym razem, gdy otwierałem wiersz polecenia. Musiałem więc połączyć wiele odpowiedzi, a teraz moja jest stała.

Moja sekwencja wyglądała następująco:

  • Iść do C:\Users\YourUserName
  • Utwórz plik o nazwie .npmrc
  • Wewnątrz tego pliku wpisz następujące informacje (jeśli jesteś w domenie AD):

proxy = http://domain\\username:password@ip:port

  • Lub użyj tego, jeśli NIE jesteś w domenie AD:

proxy = http://username:password@ip:port

  • Zapisz plik
  • Otwórz wiersz polecenia i spróbuj użyć npm

Inni odnieśli dodatkowy sukces dzięki następującym dodatkowym poleceniom:

strict-ssl = false

* Powinieneś być w stanie użyć adresu IP lub URL do proxy zamiast „IP” powyżej.

Twój łańcuch proxy może wymagać drobnych poprawek, ale dzięki temu nie musiałem dodawać tego za każdym razem.

Twoje zdrowie

Eric Steinborn
źródło
3
Uwaga, jeśli twoje hasło zawiera „@” npm nie przeanalizuje poprawnie twojego ustawienia proxy. Potencjalnym obejściem jest umieszczenie fałszywej nazwy użytkownika: hasła w konfiguracji npm i użycie lokalnego serwera proxy (takiego jak skrzypek), aby zmodyfikować nagłówek autoryzacji serwera proxy żądania, aby mieć poprawną nazwę użytkownika: hasło. Pamiętaj, że nazwa użytkownika: hasło przechowywane w Proxy-Authorization jest zakodowane w standardzie base64.
BStruthers
9
Mam moją do współpracy z:proxy = http://ip:port/ https-proxy = http://ip:port/ registry = http://registry.npmjs.org/ strict-ssl = false
Luke
1
nie
zmusiłem
1
Hej, próbowałem domain\\user:password@urltoproxy:portjednak użyć , kiedy uruchamiam npm installzmiany opcji na domain/user:password@urltoproxy:portWięc jak mam to obejść?
Jacob Schneider
Mam ten sam problem, co @JacobSchneider, na moim .npmrc: -ssl=false registry=http://registry.npmjs.org/ proxy=http://domain\\username:password#@proxy.url:8080 wtedy, gdy otrzymuję ustawienia z config za pomocą npm config get proxy: http://domain/username:password#@proxy.url:8080 zauważ, że odwrócony ukośnik odwrotny „\\” zmienia się w ukośnik do przodu / ”
pompalini
10

Może ustawienie zmiennej środowiskowej będzie dla Ciebie działać:

set HTTP_PROXY=http://user:[email protected]:port

(W moim przypadku rozwiązuje to problem z „połączeniem NIEZNANYM”, ale pojawia się zupełnie inny błąd „zawieszania się gniazda”. Próbowałem także ustawić zmienną środowiskową HTTPS_PROXY, ale otrzymałem ten sam wynik).

nafisto
źródło
Próbowałem ustawić zmienną środowiskową, a także próbowałem przekazać komendę --proxy user: [email protected]: port, ale teraz zawsze otrzymuję ECONNREFUSED .. Czy muszę podawać domenę AD dla logowania proxy?
Tobias
@Tobiias tryset HTTP_PROXY=http://domain\user:[email protected]:port
Adam Grant
8

Miałem ten sam problem i oto, co zrobiłem, aby to zadziałało:

  • Iść do: C:\Users\YourUserName
  • Utwórz plik o nazwie .npmrc
  • I jego wpis będzie brzmiał:

    registry = http://registry.npmjs.org
    
  • Spróbuj node cli.js install npm -gfponownie wykonać polecenie .

sam
źródło
Utworzyłem plik z zawartością, o której wspomniałeś, ale nadal pojawia się błąd połączenia NIEZNANY :(
Tobias
Pozdrawiam za to. Zrobiłem „npm config set register register.npmjs.org ”, aby obejść https: // i wszystko jest dobrze w moim systemie Windows.
Gavin Gilmour
1
jeśli ktoś otrzyma komunikat ETIMEOUT, dodaj ustawienie proxy za pomocąnode config set proxy http://username:password@server:port
Jeremy S.
To, co zadziałało dla mnie, to utworzenie ~/.npmrcpliku jak wyżej, który mówi npm, aby http://zamiast tego używał rejestru https://, a następnie ustawienie mojej http_proxyzmiennej środowiskowej nahttp://myusername:[email protected]:1234
Maxy-B
Uwaga, jeśli twoje hasło zawiera „@” npm nie przeanalizuje poprawnie twojego ustawienia proxy. Potencjalnym obejściem jest umieszczenie fałszywej nazwy użytkownika: hasła w konfiguracji npm i użycie lokalnego serwera proxy (takiego jak skrzypek), aby zmodyfikować nagłówek autoryzacji serwera proxy żądania, aby mieć poprawną nazwę użytkownika: hasło. Pamiętaj, że nazwa użytkownika: hasło przechowywane w Proxy-Authorization jest zakodowane w standardzie base64.
BStruthers
4

Po kilku badaniach mogłem go użyć w następujący sposób:

  1. Zainstaluj serwer proxy autoryzacji NTLM lub inny serwer proxy dla NTLM, taki jak Cntlm. Osobiście wolę serwer Python, ponieważ mogę go majstrować, a wydajność nie stanowi problemu.

  2. Skonfiguruj konfigurację; zauważ, że w moim przypadku musiałem włączyć zarówno tryb LM, jak i NT, i podejrzewam, że jest to normalny przypadek w dzisiejszych czasach.

  3. Ustaw zmienną środowiskową http_proxy i https_proxy, aby wskazywały na lokalnego proxy:

    ustaw http_proxy = "localhost: 5865"
    ustaw https_proxy = "localhost: 5865"

  4. npm powinien teraz działać, oczywiście powinien zostać wykonany z powłoki, w której zdefiniowano powyższe zmienne środowiskowe.

obrabować
źródło
3

Poniższe działało dla mnie.

W systemie Windows 7:

npm config set proxy xxhttp://username:password@proxyhost:port# 

To powinno utworzyć plik o nazwie .npmrcw C:/users/<username>folderze.

Chummar
źródło
3

Wpisz to w wierszu poleceń:

npm set proxy http://user:pass@ip:port

npm set https-proxy http://user:pass@ip:port

NIE ZAPOMNIJ ZAWIERAĆ HTTP: // przed swoją nazwą użytkownika. To zadziałało dla mnie.

Super Luvdub
źródło
2

Ten problem został dla mnie rozwiązany po utworzeniu pliku .npmrc jak powyżej, a następnie uruchomieniu polecenia adduser i podążaniu za instrukcjami cmd.

npm adduser

Uruchom następującą komendę, aby sprawdzić, czy masz autoryzowaną nazwę użytkownika:

npm whoami
Jan
źródło
2

Każda z powyższych odpowiedzi wymaga wpisania hasła przez użytkownika w pliku tekstowym lub w zmiennej środowiskowej.

Osobiście nie podobało mi się takie rozwiązanie ze względu na ich niepewne podejście. Próbowałem więc napisać aplikację, która wstrzykuje token Kerberos bieżącego użytkownika w ramach wymiany między klientem (npm, bower, git) a serwerem proxy. To powiedziawszy, Active Directory jest tylko zastrzeżoną implementacją Kerberos.

Używam tego oprogramowania codziennie na hoście Windows 8.1. Kod (golang) i pliki binarne pierwszego wydania można znaleźć na stronie https://github.com/nilleb/authentication-proxy .

nilleb
źródło
1

Wszystkie trzy rzeczy działały dla mnie w .npmrc

proxy = http://unam:pwd@host:port
https-proxy = http://unam:pwd@host:port
registry = http://registry.npmjs.org
catrapture
źródło
1

Przynajmniej w systemie Windows działa dla mnie z następującymi ustawieniami:

proxy = http: // domena % 5C nazwa użytkownika : hasło @ proxy_ip : port

tzn. (1) użyj %5Czamiast \(jak sugerowano gdzie indziej) i (2) użyj adresu IP zamiast nazwy komputera lokalnego dla serwera proxy.

Ganesh
źródło
Jest to poprawne - domena + nazwa użytkownika i hasło muszą być osobno zakodowane w adresie URL. Np. Jeśli masz hasło #, zamień je na% 23
wypłyń
1

Otrzymasz hosta proxy i port od administratora serwera lub wsparcia.

Po tej konfiguracji

npm config set http_proxy http://username:[email protected]:itsport
npm config set proxy http://username:[email protected]:itsport

Jeśli w haśle jest jakiś znak specjalny, spróbuj użyć% urlencode. Np .: - shuold funta (skrótu) należy zastąpić% 23.

Shamseer
źródło
2
Do jakich wersji ma zastosowanie Twoja odpowiedź, biorąc pod uwagę, że pytanie zostało zadane ponad 3 lata temu?
Jason Aller
Wierzę, że to nie ma znaczenia. Znalazłem rozwiązanie tego problemu po wielu próbach i nigdy nie wiedziałem, że moje hasło stanowi problem. Aby było idealne, bez względu na pytanie zadawano nawet przed dziesięcioma latami
:)
0

Rozwiązanie, które zadziałało, jest następujące:

npm config set http_proxy http: // nazwa użytkownika : hasło @ host / IP : port

npm config set proxy http: // nazwa użytkownika : hasło @ host / IP : port

zamień parametry na wartości, w moim przypadku

nazwa użytkownika : (pusty)

hasło : (puste)

host / IP : 192.36.36.110

port : 8080

więc Moje polecenia są

zestaw konfiguracyjny npm http_proxy http: //: @ 192.36.36.110: 8080

npm config set proxy http: //: @ 192.36.36.110: 8080

Śrujan Maddula
źródło
0

CNTLM nie działało dla mnie. Próbowałem wszystkich możliwych kombinacji. NPM podawał błąd uwierzytelnienia. Skrzypek przybył na ratunek i oszczędził mi czas. Jest łatwy w instalacji i konfiguracji. Ustaw regułę Fiddlera na Automatycznie uwierzytelniane. W .npmrc ustaw je

registry=http://registry.npmjs.org
proxy=http://127.0.0.1:8888
https-proxy=http://127.0.0.1:8888
http-proxy=http://127.0.0.1:8888
strict-ssl=false

To zadziałało dla mnie :)

użytkownik588459
źródło
0

To, co zadziałało, było następujące:

registry=http://registry.npmjs.org
proxy=http://<url.pac>
https-proxy=http://<url.pac>
http-proxy=http://<url.pac>
strict-ssl=false

Nie musiałem wpisywać żadnych nazw użytkowników ani haseł, po prostu URL pliku PAC.

Kunal Nanda
źródło