Aby rozwinąć @Steve Roberts, odpowiedz.
Moja nazwa użytkownika ma postać „domena \ nazwa_użytkownika” - włączenie ukośnika w konfiguracji serwera proxy spowodowało pojawienie się ukośnika. Więc wpisując to:
npm config set proxy "http://domain\username:password@servername:port/"
Musiałem również zakodować mój domain\user
ciąg w adresie URL , jednak mam spację wewnątrz mojej nazwy użytkownika, więc umieściłem a, +
aby zakodować kodowanie adresu URL spacji, ale zostanie to podwójnie zakodowane jako %2B
(co jest kodowaniem adresu URL dla znaku plusa, jednak adres URL kodowanie spacji to%20
), więc zamiast tego musiałem wykonać następujące czynności:
npm polecenie
// option one
// it works for some packages
npm config set http_proxy "http://DOMAIN%5Cuser+name:password@x.x.x.x:port"
npm config set proxy "http://DOMAIN%5Cuser+name:password@x.x.x.x:port"
// option two
// it works best for me
// please notice that I actually used a space
// instead of URL encode it with '+', '%20 ' OR %2B (plus url encoded)
npm config set http_proxy "http://DOMAIN%5Cuser name:password@x.x.x.x:port"
npm config set proxy "http://DOMAIN%5Cuser name:password@x.x.x.x:port"
// option two (B) as of 2019-06-01
// no DOMAIN
// instead of URL encode it with '+', '%20 ' OR %2B (plus url encoded)
npm config set http_proxy "http://user name:password@x.x.x.x:port"
npm config set proxy "http://user name:password@x.x.x.x:port"
rozwiązywanie problemów npm config
Użyłem tego, npm config list
aby uzyskać przeanalizowane wartości, które ustawiłem powyżej, i w ten sposób dowiedziałem się o podwójnym kodowaniu. Dziwne.
Zasadniczo musisz określić następujące wymagania:
- Czy
DOMAIN
ciąg jest wymagany do uwierzytelnienia
- Czy potrzebujesz zakodować znaki specjalne?
- Spacje i znaki (@) są szczególnie trudne
Pozdrowienia.
ZMIENNE ŚRODOWISKOWE WINDOWS (monit CMD)
Aktualizacja
Okazuje się, że nawet przy powyższych konfiguracjach nadal miałem pewne problemy z niektórymi pakietami / skryptami, które używają wewnętrznie żądania - uproszczonego klienta HTTP do pobierania rzeczy. Tak więc, jak wyjaśniono powyżej, możemy określić zmienne środowiskowe aby ustawić proxy w wierszu poleceń, a Request będzie honorować te wartości.
Następnie, po (i niechętnie się do tego przyznaję) kilku próbach (bardziej jak dni), próby ustawienia zmiennych środowiskowych, w końcu udało mi się z następującymi wskazówkami:
rem notice that the value after the = has no quotations
rem - I believe that if quotations are placed after it, they become
rem part of the value, you do not want that
rem notice that there is no space before or after the = sign
rem - if you leave a space before it, you will be declaring a variable
rem name that includes such space, you do not want to do that
rem - if you leave a space after it, you will be including the space
rem as part of the value, you do not want that either
rem looks like there is no need to URL encode stuff in there
SET HTTP_PROXY=http://DOMAIN\user name:password@x.x.x.x:port
SET HTTPS_PROXY=http://DOMAIN\user name:password@x.x.x.x:port
cntlm
Używałem powyższej techniki przez kilka tygodni, dopóki nie zdałem sobie sprawy z obciążenia związanego z aktualizacją hasła we wszystkich narzędziach, które wymagały konfiguracji proxy.
Oprócz npm używam również:
- altana
- włóczęga
- wirtualne pudełko (z systemem Linux)
- apt-get [linux]
- git
- vscode
- nawiasy
- atom
- tsd
Kroki konfiguracji cntlm
Więc zainstalowałem cntlm . Ustawienie cntlm
jest dość proste, szukasz pliku ini @C:\Program Files\Cntlm\cntlm.ini
- Otwórz
C:\Program Files\Cntlm\cntlm.ini
(możesz potrzebować uprawnień administratora)
- szukaj
Username
i Domain
linii (myślę, że linia 8-9)
- dodaj swoją nazwę użytkownika
- dodaj swoją domenę
Po poleceniu cmd uruchom:
cd C:\Program Files\Cntlm\
cntlm -M
cntlm -H
- zostaniesz poproszony o hasło:
cygwin warning:
MS-DOS style path detected: C:\Program Files\Cntlm\cntlm.ini
Preferred POSIX equivalent is: /Cntlm/cntlm.ini
CYGWIN environment variable option "nodosfilewarning" turns off this warning.
Consult the user's guide for more details about POSIX paths:
http://cygwin.com/cygwin-ug-net/using.html#using-pathnames
Password:
Wynik, który otrzymasz, cntlm -H
będzie wyglądał mniej więcej tak:
PassLM 561DF6AF15D5A5ADG
PassNT A1D651A5F15DFA5AD
PassNTLMv2 A1D65F1A65D1ASD51 # Only for user 'user name', domain 'DOMAIN'
- Zaleca się używanie PassNTLMv2, więc dodaj
#
linię przed PassLM
i PassNT
lub nie używaj ich
- Wklej wyjście ze
cntlm -H
w pliku ini zastępując linie dla PassLM
, PassNT
i PassNTMLv2
, lub komentarz oryginalne linie i dodać je.
- Dodaj swoje
Proxy
serwery. Jeśli nie wiesz, co to jest serwer proxy ... Zrób to, co zrobiłem, szukałem pliku automatycznej konfiguracji proxy, szukając AutoConfigURL
klucza rejestru w HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings
. Przejdź do tego adresu URL i przejrzyj kod, którym jest JavaScript.
- Opcjonalnie możesz zmienić port, na którym nasłuchuje cntlm, zmieniając
Listen ####
wiersz, w którym ####
jest numer portu.
Skonfiguruj NPM z cntlm
Więc wskazujesz npm na swoje proxy cntml, możesz użyć adresu IP, którego użyłem localhost
i domyślnego portu dla cntlm, 3128
więc mój adres URL serwera proxy wygląda tak
http://localhost:3128
Odpowiednią komendą:
npm config ustaw proxy http: // localhost: 3128
Jest dużo prostsze. Konfigurujesz wszystkie narzędzia z tym samym adresem URL i aktualizujesz hasło tylko w jednym miejscu. Życie nie jest o wiele prostsze.
Należy skonfigurować certyfikat npm CA.
Z dokumentacji npm ca
Jeśli korporacyjny serwer proxy przechwytuje połączenia https za pomocą własnego certyfikatu z podpisem własnym, należy tego unikać npm config set strict-ssl false
(duże nie, nie).
Podstawowe kroki
- Pobierz certyfikat ze swojej przeglądarki (Chromes działa dobrze). Wyeksportuj go jako X.509 zakodowany w Base-64 (.CER)
- Zamień nowe linie na
\n
- Edytuj
.npmrc
dodaj linięca[]="-----BEGIN CERTIFICATE-----\nXXXX\nXXXX\n-----END CERTIFICATE-----"
Zagadnienia
Zauważyłem, że czasami zawiesza się npm, więc zatrzymuję (czasem na siłę) cntlm i restartuję go.