Utilizzo di npm dietro il proxy aziendale .pac


158

Devo scaricare diversi pacchetti tramite npm ma la nostra configurazione proxy aziendale è un file .pac (sono su Windows)

Ci ho già provato

npm config set proxy http://mydomain\username:password@1.2.3.4:8181/proxy.pac
npm config set https-proxy http://mydomain\username:password@1.2.3.4:8181/proxy.pac

o

npm config set proxy http://1.2.3.4:8181/proxy.pac
npm config set https-proxy http://1.2.3.4:8181/proxy.pac

ma non funziona ...

qualche suggerimento? Grazie



8
Non penso che questa domanda sia duplicata, gli script pac possono contenere più indirizzi proxy a seconda dell'indirizzo IP / host di destinazione, mentre il dube si rivolge solo a 1 indirizzo proxy - Dalla recensione
Ferrybig,

1
Non una singola risposta indica come utilizzare gli script pac che possono contenere più indirizzi proxy a seconda dell'indirizzo IP / host di destinazione. Qualcuno può aiutare, per favore.
Partha Sarathi Ghosh,

2
Per me ha aiutato ad aprire il proxy.pacfile per ottenere l'indirizzo proxy da esso. (Nel mio caso ho dovuto semplicemente passare la porta a 8080).
nomade

@ParthaSarathiGhosh Hai ragione, nessuna delle risposte in realtà ha spiegato come usare gli script PAC, quindi ho aggiunto un'altra risposta che si rivolge a questo: stackoverflow.com/a/61811444 . È in ritardo di qualche anno, ma meglio tardi che mai?
user1031921

Risposte:


204

Ho appena avuto un problema molto simile, in cui non sono riuscito a far funzionare npm dietro il nostro server proxy.

Il mio nome utente ha il formato "dominio \ nomeutente" - inclusa la barra nella configurazione del proxy ha fatto apparire una barra. Quindi inserendo questo:

npm config set proxy "http://domain\username:password@servername:port/"

quindi l'esecuzione npm config get proxyrestituisce questo: http: // domain / username: password @ servername: port /

Pertanto per risolvere il problema ho invece codificato l'URL della barra rovesciata, quindi ho inserito questo:

npm config set proxy "http://domain%5Cusername:password@servername:port/"

e con questo l'accesso al proxy è stato corretto.


5
la causa è che ti manca la parte chiave% 5C. essendo la C .... vedi l'ho distanziata per te
sinisterrook

1
Ho appena aggiornato alcune cose e il mio proxy ha smesso di funzionare di nuovo. Si è scoperto che nell'impostazione "proxy" del file .npmrc (come indicato di seguito da @Ovidiu Buligan) conteneva% 5C per la barra rovesciata, ma "https-proxy" conteneva semplicemente "\". La modifica di questo anche in% 5C ha risolto il problema. Presumo che questo possa essere aggiornato anche eseguendo npm config set http_proxy " domain% 5Cusername: password @ servername: port /"
Steve Roberts

1
Sto provando a configurare npm dietro proxy, ma c'è un modo per fare un "ping" usando la configurazione di npm. Perché se la mia conf è sbagliata il mio utente verrà bloccato sul mio dominio aziendale.
Ricardo,

3
Ciò che ha funzionato per me è innanzitutto ELIMINARE le darn variabili ambientali. Utilizzare set HTTP_PROXY = e impostare HTTPS_PROXY =
Sydwell

4
Aggiunta strict-ssl=falseal .npmrcfile di configurazione risolto per me dietro un proxy aziendale - vedi le risposte di @ ovidiu-buligan e @ karthikeyan-a
Alexander McFarlane

64

Cerca l'URL del pacfile nelle impostazioni lan di Internet Explorer e scarica il file pac dall'URL configurato. Il file pac è solo un file javascript con una funzione denominata FindProxyForURLche restituisce diversi host proxy in diversi scenari.

Prova a trovare un host nel file pac che ritieni sia destinato al traffico web generale e collegalo a .npmrc C:\Users\<username>\.npmrc

proxy=http://<username>:<pass>@proxyhost:<port>
https-proxy=http://<uname>:<pass>@proxyhost:<port>

Anche se è possibile accedere con il proprio dominio e nome utente sul proprio computer aziendale, è altamente possibile che il nome di dominio della directory attiva dell'utente non sia richiesto per il proxy , ma solo il nome utente e la password (che potrebbero essere diversi dal proprio login di Active Directory)

Non dimenticare di giocherellare con caratteri di password speciali in fuga.


Grazie. sono passato a .npmrc e ho modificato le impostazioni. ha funzionato
arn-arn il

54

Scarica il tuo .pacfile Aprilo in qualsiasi editor e cerca PROXY = "PROXY X.X.X.X:80;. Potresti avere molti proxy, copiarne uno ed eseguire i seguenti comandi del terminale:

npm config set proxy http://X.X.X.X:80
npm config set https-proxy http://X.X.X.X:80

Ora dovresti essere in grado di installare qualsiasi pacchetto!


1
Per la parte https-proxy, ho dovuto fare "... set https-proxy = http: // ..." invece di "... imposta https-proxy http: // ..." per farlo lavoro. Solo i miei $ 0,02.
Nick,

Grazie all'impostazione di https-proxy su http: // è l'unica cosa che ha funzionato; dopo aver disinserito le variabili di ambiente http_proxy e https_proxy da bash!
Alex Punnen il

Per https-proxy, non ho potuto impostare su "imposta https-proxy https: /.../", ho dovuto impostare su "imposta https-proxy http: // ..." (informazioni proxy da https -> http)
Mars

lo stesso vale per git,git config --global http.proxy http://X.X.X.X:80 git config --global https.proxy http://X.X.X.X:80
Nome in codice Jack

38

Ho risolto questo problema in questo modo:

1) Eseguo questo comando:

npm config set strict-ssl false

2) Quindi impostare npm per l'esecuzione con http, anziché https:

npm config set registry "http://registry.npmjs.org/"

3) Quindi installare il pacchetto

npm install <package name>


2
Solo per sottolineare che l'impostazione di npm strict-ssl su false è un problema di sicurezza. Considera invece di impostare correttamente la ca[]proprietà su npm.
Aaron C,

26

Per espandere la risposta di @Steve Roberts.

Il mio nome utente ha il formato "dominio \ nomeutente" - inclusa la barra nella configurazione del proxy ha fatto apparire una barra. Quindi inserendo questo:

npm config set proxy "http://domain\username:password@servername:port/"

Ho anche dovuto codificare l'URL della mia domain\userstringa, tuttavia ho uno spazio all'interno del mio nome utente, quindi ho inserito un +per codificare la codifica dell'URL dello spazio, ma verrebbe doppiamente codificata come %2B(che è la codifica dell'URL per il segno più, tuttavia l'URL la codifica per uno spazio è %20), quindi ho dovuto invece fare quanto segue:

comando npm

// 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"

risoluzione dei problemi di npm config

Ho usato il npm config listper ottenere i valori analizzati che avevo impostato sopra, ed è così che ho scoperto la doppia codifica. Strano.

In sostanza è necessario capire i seguenti requisiti:

  1. È una DOMAINstringa richiesta per l'autenticazione
  2. Devi codificare caratteri speciali?
    • Gli spazi e i segni (@) sono particolarmente impegnativi

Saluti.

VARIABILI DELL'AMBIENTE WINDOWS (prompt CMD)

Aggiornare

Si scopre che anche con le configurazioni di cui sopra, ho ancora avuto alcuni problemi con alcuni pacchetti / script che utilizzano il client HTTP HTTP semplificato internamente per scaricare roba. Quindi, come spiegato nel readme sopra, possiamo specificare le variabili di ambiente per impostare il proxy sulla riga di comando e Request rispetterà tali valori.

Quindi, dopo (e sono riluttante ad ammetterlo) diversi tentativi (più simili ai giorni), di provare a impostare le variabili di ambiente, sono finalmente riuscito con le seguenti linee guida:

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

Ho usato la tecnica di cui sopra per alcune settimane, fino a quando ho capito il sovraccarico di aggiornare la mia password attraverso tutti gli strumenti che avevano bisogno della configurazione del proxy.

Oltre a npm, utilizzo anche:

  • pergolato
  • vagabondo
    • scatola virtuale (con Linux)
    • apt-get [linux]
  • idiota
  • vscode
  • parentesi
  • atomo
  • tsd

cntlm Procedura di installazione

Quindi, ho installato cntlm . L'impostazione cntlmè piuttosto avanzata, cerchi il file ini @C:\Program Files\Cntlm\cntlm.ini

  1. Apri C:\Program Files\Cntlm\cntlm.ini(potresti aver bisogno dei diritti di amministratore)
  2. cerca Usernamee Domainlinee (linea 8-9 penso)
    • aggiungi il tuo nome utente
    • aggiungi il tuo dominio
  3. Al prompt cmd eseguito:

    cd C:\Program Files\Cntlm\
    cntlm -M
    cntlm -H  
    • ti verrà chiesta la password:
     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:
  4. L'output che otterrai cntlm -Hsarà simile a:

    PassLM          561DF6AF15D5A5ADG  
    PassNT          A1D651A5F15DFA5AD  
    PassNTLMv2      A1D65F1A65D1ASD51  # Only for user 'user name', domain 'DOMAIN'
    • Si consiglia di utilizzare PassNTLMv2, quindi aggiungere una #riga precedente PassLMe / PassNTo non utilizzarli
  5. Incolla l'output dal cntlm -Hfile ini sostituendo le righe per PassLM, PassNTe PassNTMLv2, oppure commenta le righe originali e aggiungi le tue.
  6. Aggiungi i tuoi Proxyserver. Se non sai qual è il server proxy ... Fai quello che ho fatto, ho cercato il mio file di configurazione automatica del proxy cercando la AutoConfigURLchiave di registro inHKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings . Passa a quell'URL e controlla il codice che sembra essere JavaScript.
  7. Opzionalmente è possibile cambiare la porta su cui cntlm ascolta cambiando la Listen ####linea, dove ####è il numero di porta.

Imposta NPM con cntlm

Quindi, punti npm al tuo proxy cntml, puoi usare l'ip, ho usato localhoste la porta predefinita per cntlm, 3128quindi il mio proxy url assomiglia a questo

http://localhost:3128

Con il comando corretto:

npm config set proxy http: // localhost: 3128

È molto più semplice Configura tutti i tuoi strumenti con lo stesso URL e aggiorni la password in un'unica posizione. La vita non è molto più semplice.

Installazione obbligatoria Il certificato CA npm

Dalla documentazione npm ca

Se il proxy aziendale sta intercettando le connessioni https con il proprio certificato autofirmato, questo è un must da evitare npm config set strict-ssl false (grande no-no).

Passaggi di base

  1. Ottieni il certificato dal tuo browser (Chromes funziona bene). Esportalo come X.509 codificato Base-64 (.CER)
  2. Sostituisci nuove linee con \n
  3. Modifica il tuo .npmrcaggiungi una rigaca[]="-----BEGIN CERTIFICATE-----\nXXXX\nXXXX\n-----END CERTIFICATE-----"

Problemi

Ho notato che a volte npm si blocca, quindi mi fermo (a volte con forza) cntlm e lo riavvio.


7

Avevo riscontrato diversi problemi con questo e infine quello che ho fatto è il seguente:

  1. Fiddler usato, con "Autenticazione automatica" selezionato
  2. Nelle regole personalizzate del violinista, ho aggiunto

    if (m_AutoAuth) {oSession["X-AutoAuth"] = "domain\\username:password";}
  3. Finalmente in npm ho impostato il proxy su http: // localhost: 8888

Questo ha funzionato bene.


Grazie! Ha funzionato come un fascino !! Il mio scenario: il nome utente era in formato "dominio / nome utente". La password conteneva un "@". Non hanno a che fare qualsiasi URL codifica / decodifica, ecc a tutti
a_b

Ha funzionato perfettamente per me. Grazie mille. Volevo solo sottolineare che l'utilizzo "domain\\username:password"può rappresentare una minaccia alla sicurezza del furto di identità. Invece usando la "(default)"configurazione nelle regole personalizzate ha funzionato in modo affascinante. Fiddler deve essere in esecuzione mentre usi "npm" per farlo funzionare.
pk10

7

Per tutti coloro che lottano dietro un firewall aziendale, oltre a problemi con SSL (impossibile ottenere il certificato dell'emittente locale), ecco alcuni passaggi che puoi provare:

Dimentica SSL

Se non sei preoccupato per SSL, puoi seguire i consigli di molti collaboratori precedenti impostando i tuoi proxy e cambiando il registro con la versione non sicura:

npm config set proxy http://username:password@proxyname:port
npm config set https-proxy http://username:password@proxyname:port
npm config set registry http://registry.npmjs.org/

Un rapido "gotcha" qui, le mie credenziali proxy sono le stesse per le richieste protette e non protette (nota come ho lasciato il mio protocollo come http: // per il proxy https configurazione ). Questo potrebbe essere lo stesso per te, e potrebbe non esserlo.

Voglio mantenere SSL

Se vuoi mantenere SSL e non vuoi usarlo strict-ssl=false, hai ancora molto lavoro da fare. Per quanto mi riguarda, sono protetto da un firewall aziendale e stiamo utilizzando certificati autofirmati, quindi ricevo l'errore unable to get local issuer certificate. Se sei nella mia stessa barca, dovrai impostare l' cafile=opzione nel file di configurazione di npm. Innanzitutto, è necessario creare un file PEM che contenga informazioni sui certificati autofirmati. Se non sai come farlo, ecco le istruzioni per un ambiente Windows senza utilizzare software di terze parti:

Dobbiamo indicare esplicitamente quali certificati devono essere considerati attendibili perché stiamo utilizzando certificati autofirmati. Per il mio esempio, sono passato a www.google.com utilizzando Chrome per poter ottenere i certificati.

In Chrome, vai a Ispeziona -> Sicurezza -> Visualizza certificato. Vedrai tutti i certificati che consentono la connessione SSL. Si noti come questi certificati sono autofirmati. La parte offuscata è la mia azienda e non siamo un'autorità certificata. È possibile esportare il percorso completo del certificato come file P7B oppure esportare i certificati singolarmente come file CER (codifica base64). L'esportazione del percorso completo come P7B non ti fa molto bene perché a sua volta dovrai aprire questo file in un gestore certificati ed esportare comunque come singoli file CER. In Windows, facendo doppio clic sul file P7B si aprirà l'applicazione Certificate Manager.

inserisci qui la descrizione dell'immagine

L'esportazione come CER (Base 64) è in realtà un file di testo nel seguente formato:

-----BEGIN CERTIFICATE-----
MIIGqzCCBZOgAwIBAgITIwAAABWhFPjwukYhTAADAAAAFTANBgkqhkiG9w0BAQUF
ADBFMRMwEQYKCZImiZPyLGQBGRYDY29tMRYwFAYKCZImiZPyLGQBGRYGaXJ2aW5n
b0pvCkNmjWzaNNUg2hYET+pP5nP75aRu+kPRl9UnlQ....rest of certificate...
-----END CERTIFICATE-----

Per creare il nostro file PEM, dobbiamo semplicemente impilare questi certificati uno sopra l'altro in un singolo file e modificare l'estensione in .pem. Ho usato il blocco note per fare questo.

Si impilano i certificati in ordine inverso dal percorso del certificato. Quindi, vorrei iniziare con * .google.com, quindi incollare Websense sotto di esso, quindi Emettere CA 1 ecc. In questo modo i certificati vengono analizzati dall'alto verso il basso alla ricerca della CA radice appropriata. La semplice inclusione della CA principale non funzionerà, ma non è necessario includere tutti i certificati. Dal percorso precedente, ho solo bisogno di includere quei certificati che precedono il certificato Websense (CA di emissione 1, CA di politica, CA di root).

Una volta che questi certificati autofirmati vengono salvati in un file PEM, siamo pronti a indicare a npm di utilizzare questi certificati come nostra CA di fiducia. Basta impostare il file di configurazione e dovresti essere a posto:

npm config set cafile "C:\yourcerts.pem"

Ora, con i proxy impostati (http e https) e il registro impostati su https://registry.npmjs.org, dovresti essere in grado di installare pacchetti dietro un firewall aziendale con certificati autofirmati senza modificare le strict-sslimpostazioni.


6

Puoi controllare Fiddler se NPM sta dando errore di autenticazione. È facile da installare e configurare. Imposta Fiddler Rule su Autenticically.In .npmrc imposta queste proprietà

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

Ha funzionato per me :)


sorprendentemente, nessuna delle configurazioni che ho usato per il mio proxy ha funzionato, ho usato questo e aperto il violinista e ho potuto usarlo bene ...
Roberto

5

Prova questo, imposta proxy in npm come segue

npm config set proxy "http://<user-name>:<password>@<proxy-url>:<port>"
npm config set https-proxy "http://<user-name>:<password>@<proxy-url>:<port>"
npm config set strict-ssl false
npm config set registry "http://registry.npmjs.org/"

4

Otterrai l'host proxy e la porta dal tuo amministratore o supporto server.

Dopo quello impostato

npm config set http_proxy http://username:password@proxyofmycomp.com:itsport
npm config set proxy http://username:password@proxyofmycomp.com:itsport

Se è presente un carattere speciale nella password, prova con% urlencode. Ad esempio: - la sterlina (hash) deve essere sostituita da% 23.

Questo ha funzionato per me ...


3

Basta creare un file denominato .npmrc in una cartella del progetto, eviterà l'impostazione del proxy a livello di sistema

#Without password
proxy=http://ipaddress:80
https-proxy=http://ipaddress:80

#With password
proxy=http://<username>:<pass>@proxyhost:<port>
https-proxy=http://<uname>:<pass>@proxyhost:<port>

Commenta in questo modo se non usi il proxy

#proxy=http://ipaddress:80
#https-proxy=http://ipaddress:80

#With password
#proxy=http://<username>:<pass>@proxyhost:<port>
#https-proxy=http://<uname>:<pass>@proxyhost:<port>

3

Nessuna delle risposte esistenti spiega come utilizzare npm con un file PAC. Alcuni suggeriscono di scaricare il file PAC, ispezionarlo manualmente e scegliere una delle stringhe "PROXY ...". Ma questo non funziona se il file PAC deve scegliere tra più proxy o se il file PAC contiene una logica complessa per bypassare i proxy per determinati URL.

Inoltre, alcuni proxy aziendali richiedono l'autenticazione NTLM. CNTLM può gestire l'autenticazione, ma non supporta i file PAC.

Un'alternativa è utilizzare Alpaca , che esegue il file PAC in una VM JavaScript ed esegue l'autenticazione NTLM con il proxy risultante.


2

Se sei dietro una rete aziendale con proxy, ho appena usato uno strumento proxy ntlm e ho usato la porta e il proxy forniti da ntlm, per esempio ho usato questa configurazione:

strict-ssl=false
proxy=http://localhost:3125

Spero che aiuti.


2

Utilizzare il comando seguente in cmd o GIT Bash o altri prompt

$ npm config set proxy "http://192.168.1.101:4128"

$ npm config set https-proxy "http://192.168.1.101:4128"

dove 192.168.1.101 è proxy ip e 4128 è porta. cambiare in base alle impostazioni del proxy.


2

È necessario utilizzare "npm config set http-proxy "

uso:

npm config set http-proxy http://1.2.3.4:8181
npm config set https-proxy http://1.2.3.4:8181


1

Prova questo, è stato l'unico che ha funzionato per me:

npm --proxy http: //: @proxyhost: --https-proxy http: //: @proxyhost: --strict-ssl false install -g pacchetto

Prestare attenzione all'opzione --strict-ssl false

In bocca al lupo.


1

La configurazione del proxy NPM menzionata nella risposta accettata risolve il problema, ma come puoi vedere in questo problema di npm , alcune dipendenze usano GIT e ciò rende necessaria la configurazione del proxy git e può essere eseguita come segue:

git config --global http.proxy http://username:password@host:port
git config --global https.proxy http://username:password@host:port

La configurazione del proxy NPM menzionata:

npm config set proxy "http://username:password@host:port"
npm config set https-proxy "http://username:password@host:port"
npm config set strict-ssl false
npm config set registry "http://registry.npmjs.org/"

0

Ho avuto un problema simile e ho provato tutte le soluzioni alternative sopra ma nessuna ha funzionato per me (stavo usando caratteri speciali (come il simbolo '@') nella mia password e avevo anche bisogno di aggiungere un nome di dominio).

A parte questo, ero un po 'preoccupato di aggiungere la mia password come testo normale. Si è scoperto che la soluzione più semplice per superare tutte queste sfide era quella di utilizzare una sorta di proxy inverso (come Fiddler).

Ho già dettagliato i passaggi della configurazione in questa risposta in SO.


0

L'aggiunta delle righe seguenti nel file .typingsrc mi ha aiutato.

{
    "rejectUnauthorized": false,
    "registryURL" :"http://api.typings.org/"
 }

0

Ho riscontrato un problema simile e ho scoperto che il mio file di configurazione npm (.npmrc) ha una voce di registro errata. commentato e eseguito nuovamente npm install. ha funzionato.


0

OS: Windows 7

Passaggi che hanno funzionato per me:

  1. npm config get proxy
  2. npm config get https-proxy

  3. Commenti: ho eseguito questo comando per conoscere le mie impostazioni proxy
    npm config rm proxy

  4. npm config rm https-proxy
  5. npm config set registry=http://registry.npmjs.org/
  6. npm install

0

Poiché ho ancora problemi con l'impostazione delle impostazioni proxy sul lavoro e la loro disattivazione a casa, ho scritto e pubblicato npm-corpo-proxy.sh . In ogni corpo la password deve essere cambiata spesso e deve contenere caratteri speciali, che devono essere codificati prima di alimentare npm config (lo stesso per il dominio backash / utente).


0

Da una piccola ricerca su google la prima cosa che ho provato è stata questa

npm config set registry http://registry.npmjs.org/
npm config set proxy "your proxy"
npm config set https-proxy "your proxy"

Ma npm sembrava perdere la connessione quando cercava di eseguire "npm install". poi ho eseguito questa riga nel prompt dei comandi e ora posso usare npm install

set NODE_TLS_REJECT_UNAUTHORIZED=0

0

Non sono riuscito a farlo funzionare con il CNTLM. Ho provato a seguire tutte le informazioni pubblicate sopra, ma il proxy non ha ancora autorizzato la connessione. Con Fiddler, devi solo installarlo e selezionare l'opzione Autenticato automaticamente. Ma per funzionare, ho dovuto rimuovere il file .npmrc dalla mia cartella utente e impostare le variabili di ambiente come indicato qui , con questi valori:

set npm_config_https-proxy="http://127.0.0.1:8888"

set npm_config_registry="http://registry.npmjs.org/"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.