Wie installiere ich NPM hinter dem Authentifizierungs-Proxy unter Windows?

30

Ich muss die neueste Version von Node und NPM unter Windows ausführen. Ich habe Node 0.5.8 installiert und die NPM-Quellen von GitHub heruntergeladen. Die Schritte, die ich zur Installation von NPM ausgeführt habe, sind auf der GitHub-Site aufgeführt. Bei der Ausführung des folgenden Befehls ist jedoch ein Problem aufgetreten:

node cli.js install npm -gf

Es schlägt jedoch mit der folgenden Fehlermeldung fehl:

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

Ich denke, dass dies ein Problem ist, da ich eine Authentifizierung bei meinem Proxy benötige, um eine Verbindung zum Internet herzustellen. Ich habe jedoch keine Möglichkeit gefunden, dem Installationsprogramm mitzuteilen, dass meine Anmeldeinformationen für die Anmeldung verwendet werden sollen. Gibt es eine Möglichkeit, meine Proxy-IP- und Anmeldeinformationen für die npm-Installation bereitzustellen, möglicherweise über Befehlszeilenargumente?

Ich kann das vollständige Protokoll mithilfe des Pastebins bereitstellen (scheint jedoch keine relevanteren Informationen zu haben), falls erforderlich.

Tobias
quelle
6
Ein kleiner Trick, wenn der Benutzername die Domain \ User-Notation enthält, ersetzen Sie den Backslash durch den http-Escape-Code (% 5C)
@layos Vielen Dank. Wäre dies nicht der Fall, würde ich Ihnen Gold geben.
Korinna

Antworten:

39

set http_proxyfunktionierte sehr gut für mich, aber ich musste es jedes Mal eingeben, wenn ich die Eingabeaufforderung öffnete. Also musste ich mehrere Antworten kombinieren und jetzt ist meine permanent.

Meine Sequenz lief wie folgt ab:

  • Gehe zu C:\Users\YourUserName
  • Erstellen Sie eine Datei mit dem Namen .npmrc
  • Geben Sie in diese Datei Folgendes ein (wenn Sie sich in einer AD-Domäne befinden):

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

  • Oder verwenden Sie dies, wenn Sie NICHT in einer AD-Domain sind:

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

  • Speicher die Datei
  • Öffnen Sie eine Eingabeaufforderung und versuchen Sie zu verwenden npm

Andere hatten zusätzlichen Erfolg mit dem folgenden zusätzlichen Befehl:

strict-ssl = false

* Sie sollten in der Lage sein, eine IP-Adresse oder die URL zum Proxy anstelle von "IP" oben zu verwenden.

Ihre Proxy-Zeichenfolge muss möglicherweise etwas angepasst werden, dies hat jedoch dazu geführt, dass ich diese Zeichenfolge nicht jedes Mal hinzufügen muss.

Prost

Eric Steinborn
quelle
3
Heads-up, wenn Ihr Passwort "@" npm enthält, wird Ihre Proxy-Einstellung nicht korrekt analysiert. Eine mögliche Problemumgehung besteht darin, einen falschen Benutzernamen: Passwort in die npm-Konfiguration einzufügen und einen lokalen Proxy (wie fiddler) zu verwenden, um den Proxy-Authorization-Header der Anfrage so zu ändern, dass er den richtigen Benutzernamen: Passwort enthält. Denken Sie daran, dass der in Proxy-Authorization gespeicherte Benutzername: Passwort base64-verschlüsselt ist.
BStruthers
9
proxy = http://ip:port/ https-proxy = http://ip:port/ registry = http://registry.npmjs.org/ strict-ssl = false
Luke
1
habe meins nicht zum arbeiten gebracht mit benutzername: passwort
philx_x
1
Hey, ich habe es domain\\user:password@urltoproxy:portjedoch versucht , als ich npm installdie Option ändere. domain/user:password@urltoproxy:portAlso, wie kann ich das umgehen?
Jacob Schneider
Ich habe das gleiche Problem wie @JacobSchneider, auf meinem .npmrc: -ssl=false registry=http://registry.npmjs.org/ proxy=http://domain\\username:password#@proxy.url:8080 dann , wenn ich von config - get - Einstellung mit npm config get proxy: http://domain/username:password#@proxy.url:8080 Notiz , dass das ausgetretene Backslash ‚\\‘ Änderungen an einen Schrägstrich ‚/‘
pompalini
10

Vielleicht funktioniert das Setzen einer Umgebungsvariablen für Sie:

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

(In meinem Fall wird dadurch die Fehlermeldung "connect UNKNOWN" behoben, es wird jedoch eine völlig andere Fehlermeldung angezeigt. Ich habe auch versucht, die Umgebungsvariable HTTPS_PROXY festzulegen, habe jedoch das gleiche Ergebnis erzielt.)

Nafisto
quelle
Ich habe versucht, die Umgebungsvariable zu setzen und auch versucht, --proxy user: [email protected]: port an den Befehl zu übergeben, aber jetzt erhalte ich immer ECONNREFUSED. Muss ich meine AD-Domäne für die Proxy-Anmeldung angeben?
Tobias
@ Tobias versuchenset HTTP_PROXY=http://domain\user:[email protected]:port
Adam Grant
8

Ich hatte dieses identische Problem und hier ist, was ich getan habe, um diese Arbeit zu machen:

  • Gehe zu: C:\Users\YourUserName
  • Erstellen Sie eine Datei mit dem Namen .npmrc
  • Und der Eintrag lautet:

    registry = http://registry.npmjs.org
    
  • Versuchen Sie den Befehl node cli.js install npm -gferneut.

Sam
quelle
Ich habe die Datei mit dem Inhalt erstellt, den Sie erwähnt haben, erhalte aber immer noch den Verbindungsfehler UNBEKANNT :(
Tobias,
Prost dafür. Hat ein „npm Konfig.satz Registry registry.npmjs.org “ zu umgehen , die https: // und alles ist gut auf meinem Windows - Setup.
Gavin Gilmour
1
Wenn jemand die ETIMEOUT-Nachricht erhält, fügen Sie die Proxy-Einstellung mitnode config set proxy http://username:password@server:port
Jeremy S. hinzu.
Was für mich funktionierte, war die Erstellung der ~/.npmrcDatei wie oben, die npm anweist, die http://Registrierung anstelle von zu verwenden https://, und dann meine http_proxyUmgebungsvariable aufhttp://myusername:[email protected]:1234
Maxy-B
Heads-up, wenn Ihr Passwort "@" npm enthält, wird Ihre Proxy-Einstellung nicht korrekt analysiert. Eine mögliche Problemumgehung besteht darin, einen falschen Benutzernamen: Passwort in die npm-Konfiguration einzufügen und einen lokalen Proxy (wie fiddler) zu verwenden, um den Proxy-Authorization-Header der Anfrage so zu ändern, dass er den richtigen Benutzernamen: Passwort enthält. Denken Sie daran, dass der in Proxy-Authorization gespeicherte Benutzername: Passwort base64-verschlüsselt ist.
BStruthers
4

Nach einigen Recherchen könnte ich es so benutzen:

  1. Installieren Sie NTLM Authorization Proxy Server oder einen anderen Proxyserver für NTLM, z. B. Cntlm. Ich persönlich bevorzuge den Python-Server, da ich daran basteln kann und die Leistung kein Problem darstellt.

  2. Richten Sie die Konfiguration ein. Beachten Sie, dass ich in meinem Fall sowohl den LM- als auch den NT-Modus aktivieren musste und ich vermute, dass dies heutzutage der Normalfall ist.

  3. Legen Sie die Umgebungsvariablen http_proxy und https_proxy so fest, dass sie auf Ihren lokalen Proxy verweisen:

    set http_proxy = "localhost: 5865"
    set https_proxy = "localhost: 5865"

  4. npm sollte jetzt funktionieren, natürlich sollte es von einer Shell ausgeführt werden, in der die obigen Umgebungsvariablen definiert sind.

rauben
quelle
3

Folgendes hat bei mir funktioniert.

Unter Windows 7:

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

Das sollte eine Datei erstellen, die .npmrcin dem C:/users/<username>Ordner benannt wird.

Chummar
quelle
3

Geben Sie dies in die Befehlszeile ein:

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

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

VERGESSEN SIE NICHT, HTTP: // vor Ihrem Benutzernamen einzuschließen . Es hat bei mir funktioniert.

Super Luvdub
quelle
2

Dieses Problem wurde für mich behoben, nachdem ich die .npmrc- Datei wie oben erstellt und dann den Befehl adduser und die folgenden cmd-Eingabeaufforderungen ausgeführt hatte.

npm adduser

Führen Sie das folgende Kommando aus, um festzustellen, ob Sie einen autorisierten Benutzernamen haben:

npm whoami
John
quelle
2

Bei jeder der obigen Antworten muss der Benutzer sein Kennwort in eine Textdatei oder in eine Umgebungsvariable schreiben.

Persönlich gefiel mir eine Lösung wie diese nicht, weil sie unsicher war. Also habe ich versucht, eine Anwendung zu schreiben, die das Kerberos-Token des aktuellen Benutzers in den Austausch zwischen dem Client (npm, bower, git) und dem Proxy einfügt. Allerdings ist Active Directory nur eine proprietäre Implementierung von Kerberos.

Ich verwende diese Software jeden Tag auf einem Windows 8.1-Host. Den Code (golang) und die Binärdateien der ersten Version finden Sie unter https://github.com/nilleb/authentication-proxy .

Nilleb
quelle
1

Alle drei Dinge funktionierten für mich in .npmrc

proxy = http://unam:pwd@host:port
https-proxy = http://unam:pwd@host:port
registry = http://registry.npmjs.org
catrapture
quelle
1

Zumindest in Windows funktioniert es bei mir mit folgender Einstellung:

Proxy = http: // Domäne % 5C Benutzername : Kennwort @ Proxy-IP : Port

dh (1) Verwenden Sie %5Canstelle von \(wie an anderer Stelle vorgeschlagen) und (2) Verwenden Sie die IP-Adresse anstelle des lokalen Computernamens für den Proxyserver.

Ganesh
quelle
Dies ist richtig - die Domain + Benutzername und das Passwort müssen separat URL-codiert werden. Wenn Sie beispielsweise # in Ihrem Passwort haben, ersetzen Sie es durch% 23
segeln Sie
1

Sie erhalten den Proxy-Host und den Port von Ihrem Serveradministrator oder Support.

Danach einrichten

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

Wenn das Passwort ein Sonderzeichen enthält, versuchen Sie es mit% urlencode. ZB: - Pfund (Hash) soll durch% 23 ersetzt werden.

Shamseer
quelle
2
Auf welche Versionen bezieht sich Ihre Antwort angesichts der Tatsache, dass die Frage vor mehr als drei Jahren gestellt wurde?
Jason Aller
Ich glaube, es spielt keine Rolle. Ich fand die Lösung für dieses Problem nach viel versucht und nie wusste , dass mein Passwort zu machen wurde issue.In , um es perfekt zu machen anwser war egal Frage schon vor 10 Jahren gefragt:) ...
Shamseer
0

Die Lösung, die für mich funktioniert hat, ist die folgende:

npm config set http_proxy http: // benutzername : passwort @ host / IP : port

npm config set proxy http: // benutzername : passwort @ host / IP : port

Ersetzen Sie in meinem Fall die Parameter durch die Werte

Nutzername : (leer)

Passwort : (leer)

Host / IP : 192.36.36.110

Hafen : 8080

Meine Befehle sind also

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

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

Srujan Maddula
quelle
0

CNTLM hat bei mir nicht funktioniert. Ich habe alle möglichen Kombinationen ausprobiert. NPM hat einen Authentifizierungsfehler gemeldet. Fiddler kam zur Rettung und sparte mir Zeit. Es ist einfach zu installieren und zu konfigurieren. Setzen Sie die Fiddler-Regel auf Automatisch authentifiziert. In .npmrc legen Sie diese fest

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

Es hat bei mir funktioniert :)

user588459
quelle
0

Was für mich funktioniert hat, war wie folgt:

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

Ich musste keine Benutzernamen oder Passwörter eingeben, nur die URL der PAC-Datei.

Kunal Nanda
quelle