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.


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


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:pass@server.url: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).


Próbowałem ustawić zmienną środowiskową, a także próbowałem przekazać komendę --proxy user: pass@server.url: port, ale teraz zawsze otrzymuję ECONNREFUSED .. Czy muszę podawać domenę AD dla logowania proxy?
Tobias

@Tobiias tryset HTTP_PROXY=http://domain\user:pass@server.url: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 .


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:mypassword@proxy.company.com: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.


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.


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.


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

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 .


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

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.


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:password@proxyofmycomp.com:itsport
npm config set proxy http://username:password@proxyofmycomp.com: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.


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


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 :)


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.

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.