企業プロキシ.pacの背後でnpmを使用する


158

npmからいくつかのパッケージをダウンロードする必要がありますが、企業のプロキシ構成は.pacファイルです(Windowsを使用しています)。

私はすでに試しました

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

または

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

しかし、それは動作しません...

なにか提案を?ありがとう



8
私はこの質問が重複しているとは思わない、PACスクリプトはターゲットのIP /ホストアドレスに応じて複数のプロキシアドレスを含むことができるが、DUBEは1つのプロキシアドレスしかアドレスしない- レビューより
Ferrybig

1
単一の回答ではなく、ターゲットIP /ホストアドレスに応じて複数のプロキシアドレスを含めることができるPACスクリプトの使用方法を示しています。誰かが助けてくれますか?
Partha Sarathi Ghosh 2016

2
私にとっては、proxy.pacプロキシアドレスを取得するためにファイルを開くのに役立ちました。(私の場合、単にポートを8080に切り替える必要がありました)。
遊牧民

@ParthaSarathiGhoshそのとおりです。実際にPACスクリプトの使用方法を説明する回答はなかったため、これに対処する別の回答を追加しました:stackoverflow.com/a/61811444。数年遅れますが、遅れることはありませんか?
user1031921

回答:


204

プロキシサーバーの背後でnpmを動作させることができないという、非常によく似た問題が発生しました。

ユーザー名の形式は「ドメイン\ユーザー名」です。プロキシ構成にスラッシュを含めると、スラッシュが表示されます。だからこれを入力してください:

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

次にこれを実行すると、次npm config get proxyが返されます: http:// domain / username:password @ servername:port /

したがって、問題を修正するために、代わりにバックスラッシュをURLエンコードしたので、次のように入力しました。

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

これでプロキシアクセスが修正されました。


5
その原因は、%5C .keyパーツがCになっていることです...スペースを空けて参照してください
sinisterrook

1
更新したところ、プロキシが機能しなくなりました。.npmrcファイルの「プロキシ」設定では(@Ovidiu Buliganによって後述)、バックスラッシュの%5Cが含まれていましたが、「https-proxy」には「\」のみが含まれていることがわかりました。これを%5Cでも変更すると、問題が修正されました。これは、npm config set http_proxy " domain% 5Cusername:password @ servername:port /"を
Steve Roberts

1
プロキシの背後でnpmを構成しようとしていますが、npm構成を使用して「ping」を実行する方法があります。なぜなら、私の設定が間違っていると、私のユーザーは私の企業ドメインでブロックされてしまうからです。
Ricardo

3
私にとってうまくいったのは、まず、環境変数をクリアすることです。使用して、HTTP_PROXY =設定し、設定HTTPS_PROXY =
Sydwell

4
追加strict-ssl=false.npmrc企業のプロキシの背後に私のために解決設定ファイル-からの回答を参照してください@ Ovidiuさん-buligan@カーティケヤン-
アレクサンダー・マクファーレン

64

pacInternet ExplorerのLAN設定でファイルのURLを探し、構成されたURLからPACファイルをダウンロードします。pacファイルはFindProxyForURL、さまざまなシナリオでさまざまなプロキシホストを返すという名前の関数を含む単なるJavaScriptファイルです。

一般的なWebトラフィック用と思われるpacファイルでホストを見つけて、.npmrcにプラグインします C:\Users\<username>\.npmrc

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

会社のマシンにドメインとユーザー名でログインする場合でも 、ユーザーのActive Directoryドメイン名がプロキシ必要でなく、ユーザー名とパスワードのみが必要である可能性が高いです(Active Directoryのログインとは異なる場合があります)。

特殊なパスワード文字をエスケープすることを忘れないでください。


ありがとう。.npmrcに移動して設定を変更します。うまくいった
arn-arn 2017年

54

.pacファイルをダウンロードします。任意のエディターで開き、を探しますPROXY = "PROXY X.X.X.X:80;。多くのプロキシがあり、それらのいずれかをコピーして、次の端末コマンドを実行します。

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

これで、任意のパッケージをインストールできるはずです!


1
https-proxy部分については、「... set https-proxy http:// ...」の代わりに「... set https-proxy = http:// ...」を実行する必要がありました。作業。たったの$ .02。
Nick

https-proxyをhttp://に設定していただいてありがとうございます。bashからhttp_proxyおよびhttps_proxy環境変数を設定解除した後!
Alex Punnen 2017年

https-proxyの場合、「set https-proxy https:/.../」に設定できませんでした。「set https-proxy http:// ...」に設定する必要がありました(httpsのプロキシ情報-> HTTP)
火星

同じことがgitにも当てはまりますgit config --global http.proxy http://X.X.X.X:80 git config --global https.proxy http://X.X.X.X:80
コードネームJack

38

私はこの方法でこの問題を解決しました:

1)私はこのコマンドを実行します:

npm config set strict-ssl false

2)次に、httpsではなくhttpで実行するようにnpmを設定します。

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

3)次に、パッケージをインストールします

npm install <package name>


2
npmのstrict-sslfalseに設定することはセキュリティ上の問題であることを指摘するだけです。代わりにca[]、npmでプロパティを適切に設定することを検討してください 。
アーロンC

26

@Steve Robertsの回答を拡張します。

ユーザー名の形式は「ドメイン\ユーザー名」です。プロキシ構成にスラッシュを含めると、スラッシュが表示されます。だからこれを入力してください:

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

domain\user文字列をURLエンコードする必要もありましたが、ユーザー名の中にスペースがあるため+、スペースURLエンコードをエンコードするためにを配置しましたが、二重にエンコードされます%2B(これは、プラス記号のURLエンコードですが、URLスペースのエンコーディングは%20)なので、代わりに次のようにする必要がありました。

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"

npm構成のトラブルシューティング

npm config list上で設定した解析済みの値を取得するためにを使用しました。これが、二重エンコーディングについて知った方法です。変だ。

基本的に、次の要件を把握する必要があります。

  1. されたDOMAIN文字列は、認証に必要な
  2. 特殊文字をエンコードする必要がありますか?
    • スペースとアットマーク(@)は特に難しい

よろしく。

WINDOWS環境変数(CMDプロンプト)

更新

上記の設定でも、内部的にRequest-Simplified HTTPクライアントを使用してデータをダウンロードする一部のパッケージ/スクリプトに問題があったことがわかりました。したがって、上記のreadmeで説明したように、環境変数を指定できますに、コマンドラインでをてプロキシを設定すると、Requestはそれらの値を受け入れます。

次に、環境変数を設定しようとする数日後数日間のように)に試行した後そしてこれを認めるのをためらいました)、最終的に次のガイドラインで成功しました。

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

上記の手法を数週間使用しましたが、プロキシのセットアップを必要とするすべてのツールでパスワードを更新するオーバーヘッドに気づきました。

npmのほかに、私も使用します。

  • お辞儀
  • 浮浪者
    • 仮想ボックス(Linuxを実行)
    • apt-get [linux]
  • ギット
  • vscode
  • ブラケット
  • 原子
  • TSD

cntlmのセットアップ手順

それで、私はcntlmをインストールしました。設定cntlmはかなり簡単です、あなたはiniファイルを探します@C:\Program Files\Cntlm\cntlm.ini

  1. 開くC:\Program Files\Cntlm\cntlm.ini(管理者権限が必要になる場合があります)
  2. 以下のための外観UsernameDomainライン(ライン8-9と思います)
    • ユーザー名を追加
    • ドメインを追加
  3. コマンドプロンプトで次を実行:

    cd C:\Program Files\Cntlm\
    cntlm -M
    cntlm -H  
    • パスワードを求められます:
     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. 取得する出力は次のようにcntlm -Hなります。

    PassLM          561DF6AF15D5A5ADG  
    PassNT          A1D651A5F15DFA5AD  
    PassNTLMv2      A1D65F1A65D1ASD51  # Only for user 'user name', domain 'DOMAIN'
    • PassNTLMv2を使用することをお勧めします。そのため、#before行PassLMを追加し、PassNTまたは使用しないでください。
  5. からの出力をcntlm -Hiniファイルに貼り付けてPassLMPassNTおよびの行を置き換えますPassNTMLv2。または、元の行をコメントにして自分の行を追加します。
  6. Proxyサーバーを追加します。プロキシサーバーが何であるかわからない場合...私がしたことを実行して、AutoConfigURLレジストリキーを探してプロキシ自動構成ファイルを探しましたHKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings。そのURLに移動して、たまたまJavaScriptであるコードを調べます。
  7. オプションListen ####で、####がポート番号である行を変更することにより、cntlmがリッスンするポートを変更できます。

cntlmでNPMをセットアップする

だから、あなたはnpmをあなたのcntmlプロキシにポイントします、あなたは私のプロキシURLがこのように見えるように、私が使用localhostしたcntlmのデフォルトポートを使用できます3128

http://localhost:3128

適切なコマンドで:

npm設定セットプロキシhttp:// localhost:3128

ずっと簡単です。すべてのツールを同じURLでセットアップし、1か所でのみパスワードを更新します。人生はそれほど単純ではありません。

npm CA証明書を設定する必要があります

npmドキュメンテーションcaから

企業プロキシが独自の自己署名証明書でhttps接続を傍受している場合、これは回避する必要があります npm config set strict-ssl false (大いにいいえ)。

基本的な手順

  1. ブラウザーから証明書を取得します(Chromeは正常に動作します)。Base-64エンコードされたX.509(.CER)としてエクスポートします
  2. 新しい行を次で置き換える \n
  3. .npmrc行を追加して編集ca[]="-----BEGIN CERTIFICATE-----\nXXXX\nXXXX\n-----END CERTIFICATE-----"

問題

ときどきnpmがハングすることに気づいたので、cntlmを(場合によっては強制的に)停止して再起動します。


7

私はこれでいくつかの問題に遭遇しました、そして最後に私がしたことは次のとおりです:

  1. 「自動認証」が選択された状態のフィドラーを使用
  2. バイオリン弾きのカスタムルールで、私は追加しました

    if (m_AutoAuth) {oSession["X-AutoAuth"] = "domain\\username:password";}
  3. 最後にnpmでプロキシをhttp:// localhost:8888に設定しました

これはうまくいきました。


ありがとう!魅力的に働いた!! 私のシナリオ:ユーザー名は「ドメイン/ユーザー名」の形式でした。パスワードに「@」が含まれています。URLのエンコード/デコードなどをまったく行う必要がありませんでした
A_B

私には完璧に働きました。どうもありがとうございます。を使用"domain\\username:password"すると、ID盗難のセキュリティ上の脅威になる可能性があることを指摘したかっただけです。代わり"(default)"に、カスタムルールで設定を使用すると、魅力的に機能しました。これを機能させるには、「npm」を​​使用している間、Fiddlerが実行されている必要があります。
pk10

7

企業のファイアウォールの背後で苦労している人や、SSLの問題(ローカル発行者の証明書を取得できない)の場合は、次の手順を試してください。

SSLを忘れる

SSLに関心がない場合は、プロキシを設定し、レジストリを非セキュアバージョンに変更することで、以前の多くの貢献者のアドバイスに従うことができます。

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/

ここで簡単に説明すると、プロキシ資格情報は、保護された要求と保護されていない要求で同じです(https-proxy構成でプロトコルをhttp://のままにしたことに注意してください)。これはあなたにとって同じかもしれませんし、そうでないかもしれません。

SSLを保持したい

SSLを維持し、を使用したくないstrict-ssl=false場合は、さらに作業が必要です。私の場合、私は企業ファイアウォールの背後にいて、自己署名証明書を使用しているため、エラーが表示されますunable to get local issuer certificate。私と同じボートにいるcafile=場合は、npm構成ファイルでオプションを設定する必要があります。まず、自己署名証明書に関する情報を保持するPEMファイルを作成する必要があります。その方法がわからない場合は、サードパーティソフトウェアを使用しないWindows環境での手順を次に示します。

自己署名証明書を使用しているため、どの証明書を信頼する必要があるかを明示的に示す必要があります。この例では、Chromeを使用してwww.google.comにアクセスし、証明書を取得しました。

Chromeで、[検査]-> [セキュリティ]-> [証明書の表示]に移動します。SSL接続を許可するすべての証明書が表示されます。これらの証明書が自己署名されていることに注意してください。ぼやけた部分は私の会社であり、私たちは認定機関ではありません。証明書の完全なパスをP7Bファイルとしてエクスポートするか、証明書を個別にCERファイル(base64エンコード)としてエクスポートできます。P7Bとしてフルパスをエクスポートしても、証明書マネージャーでこのファイルを開き、いずれにしても個別のCERファイルとしてエクスポートする必要があるため、あまり効果はありません。Windowsでは、P7Bファイルをダブルクリックすると、証明書マネージャーアプリケーションが開きます。

ここに画像の説明を入力してください

CER(Base 64)としてのエクスポートは、実際には次の形式のテキストファイルです。

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

PEMファイルを作成するには、これらの証明書を1つのファイルに積み重ね、拡張子を.pemに変更するだけです。これを行うためにメモ帳を使用しました。

証明書パスとは逆の順序で証明書をスタックします。したがって、上記では、*。google.comから始めて、その下にWebsenseを貼り付け、次にCA 1を発行します。このようにして、適切なルートCAを探して証明書を上から下に解析します。ルートCAを含めるだけでは機能しませんが、すべての証明書を含める必要はありません。上記のパスから、Websense証明書(発行CA 1、ポリシーCA、ルートCA)の前にある証明書のみを含める必要があります。

これらの自己署名証明書をPEMファイルに保存したら、これらの証明書を信頼できるCAとして使用するようにnpmに指示する準備が整います。設定ファイルを設定するだけで、問題はありません。

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

これで、プロキシを設定し(httpおよびhttps)、レジストリをに設定するhttps://registry.npmjs.orgと、strict-ssl設定を無効にすることなく、自己署名証明書を使用して企業ファイアウォールの背後にパッケージをインストールできるようになります。


6

NPMが認証エラーを出している場合は、Fiddlerを確認できます。インストールと設定は簡単です。Fiddler RuleをAutomatically Authenticated.In .npmrcに設定し、これらのプロパティを設定します

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

それは私のために働いた:)


驚いたことに、私がプロキシに使用した構成はどれも機能しませんでした。これを使用してフィドラーを開き、問題なく使用できました...
Roberto

5

これを試して、次のようにnpmでプロキシを設定してください

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

サーバー管理者またはサポートからプロキシホストとポートを取得します。

その後セットアップ

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

パスワードに特殊文字がある場合は、%urlencodeを試してください。例:-ポンド(ハッシュ)は%23に置き換えられます。

これは私のために働いた...


3

プロジェクトフォルダーに.npmrcファイルという名前のファイルを作成するだけで、システムレベルでのプロキシ設定が回避されます

#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>

プロキシを使用しない場合は、このようにコメントしてください

#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

既存の回答のいずれも、PACファイルでnpmを使用する方法を説明していません。PACファイルをダウンロードして手動で検査し、「PROXY ...」文字列の1つを選択することを提案する人もいます。ただし、PACファイルが複数のプロキシから選択する必要がある場合、またはPACファイルに特定のURLのプロキシをバイパスする複雑なロジックが含まれている場合、これは機能しません。

また、一部の企業プロキシにはNTLM認証が必要です。CNTLMは認証を処理できますが、PACファイルはサポートしていません。

別の方法は、JavaScript VMでPACファイルを実行し、結果のプロキシを使用してNTLM認証を実行するAlpacaを使用することです。


2

プロキシを使用する企業ネットワークの背後にいる場合、私はntlmプロキシツールを使用し、ntlmによって提供されるポートとプロキシを使用しました。

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

これがお役に立てば幸いです。


2

cmdまたはGIT Bashまたはその他のプロンプトで以下のコマンドを使用します

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

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

ここで、192.168.1.101はプロキシIPで、4128はポートです。プロキシ設定に従って変更します。




1

これを試してください、それが私のために働いた唯一のものでした:

npm --proxy http://:@proxyhost:--https-proxy http://:@proxyhost:--strict-ssl falseインストール-gパッケージ

オプション--strict-ssl falseに注意してください

幸運を。


1

NPMプロキシ設定が問題を解決受け入れ答えで述べた、しかし、あなたが見ることができるように、このNPM問題、いくつかの依存関係は、GITを使用して作ることに必要なgitのプロキシ設定をし、次のように行うことができます。

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

言及されたNPMプロキシーのセットアップ:

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

同様の問題があり、上記の回避策をすべて試しましたが、どれもうまくいきませんでした(パスワードに特殊文字(「@」記号など)を使用しており、ドメイン名も追加する必要がありました)。

それとは別に、パスワードをプレーンテキストとして追加するのは少し不安でした。これらすべての課題を克服する最も簡単なソリューションは、ある種のリバースプロキシ(Fiddlerなど)を使用することでした。

この回答の構成手順はすでにSO で詳しく説明しました。



0

私は同様の問題に遭遇し、私のnpm設定ファイル(.npmrc)が間違ったレジストリエントリを持っていることがわかりました。コメントアウトして、npm installを再実行しました。出来た。


0

OS: Windows 7

私のために働いたステップ:

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

  3. コメント:プロキシ設定を確認するためにこのコマンドを実行しました
    npm config rm proxy

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

0

職場でのプロキシ設定の設定と自宅での設定のオフにまだ問題があるため、スクリプトを作成してnpm-corpo-proxy.shを公​​開しました。すべてのコーポでパスワードを頻繁に変更する必要があり、npm configを供給する前にエンコードする必要がある特殊文字を含める必要があります(バックアッシュフォームdomain \ userの場合も同じ)。


0

グーグルで少し検索したところ、最初に試したのはこれでした

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

しかし、それでも「npm install」を実行しようとすると、npmは接続を失ったように見えました。次に、コマンドプロンプトでこの行を実行し、npm installを使用できるようになりました

set NODE_TLS_REJECT_UNAUTHORIZED=0

0

CNTLMで動作させることができませんでした。上記のすべての情報を試してみましたが、プロキシはまだ接続を承認していませんでした。Fiddlerでは、それをインストールして、[自動認証]オプションをオンにするだけです。しかし、機能させるには、ユーザーフォルダーから.npmrcファイルを削除し、次の値を使用して、ここ示すように環境変数を設定する必要がありました

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

set npm_config_registry="http://registry.npmjs.org/"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.