Proxy
npm install 在一個代理後面但得到 Http Error=407(Forefront TMG 需要授權)
作業系統是 MacOS,已經在Network Preferences中設置了 http(s) 代理,但是在終端執行(npm 是 nodejs 的一個包安裝程序)時總是無法安裝任何包
npm install
,它彈出錯誤407 Proxy Authentication Required
。所以我安裝了cntlm並應用了正確的配置。
下面是測試,它似乎通過了(返回 HTTP 程式碼 200):
cntlm -c /usr/local/etc/cntlm.conf -I -M http://registry.npmjs.org/vue Password: Config profile 1/4... OK (HTTP code: 200) ----------------------------[ Profile 0 ]------ Auth NTLMv2 PassNTLMv2 28B089518C6573274C6B9D83D0XXXXXX
當我執行
npm i vue-cli -g
時,cntlm確實收到瞭如下請求:cntlm -c /usr/local/etc/cntlm.conf -f Oct 15 15:12:29 cntlm[17646] <Info>: Cntlm ready, staying in the foreground Oct 15 15:12:38 cntlm[17646] <Info>: Using proxy company-proxy:80 Oct 15 15:12:38 cntlm[17646] <Debug>: 127.0.0.1 GET http://registry.npmjs.org/nexe
但是nodejs拋出了以下異常:
npm i vue-cli -g npm ERR! code E407 npm ERR! 407 Proxy Authentication Required ( Forefront TMG requires authorization to fulfill the request. Access to the Web Proxy filter is denied. ): vue-cli@latest npm ERR! A complete log of this run can be found in: npm ERR! /Users/****/.npm/_logs/2018-10-15T23_13_47_019Z-debug.log
這讓我很困惑:因為測試通過了,但是為什麼cntlm仍然無法連接到 npmjs.org?
最後找出解決方案:
- 不要使用純文字密碼
#
(在行首添加一個Password
,例如更改Password XXX
為#Password XXX
)- 改用PassLM,PassNT,PassNTLMv2(似乎雜湊值將再次阻止身份驗證握手機制,這應該意味著您代表已登錄 Windows 使用者帳戶的應用程序)。
預設的 cntlm 配置文件已經介紹瞭如何生成它們的步驟。
我的步驟如下:
- 執行
cntlm -H -d your_domain -u your_username
- 然後它會提示密碼,填寫您的密碼,然後按 Enter:
輸出將如下所示:
Password: PassLM F5314AF8A2DB16BDB7EE9FA6CFC5BC9A PassNT 4EC02E0D65F8F0C1A9386C69CB6A2555 PassNTLMv2 28B089518C6573274C6B9D83D0EB8651
- 將上述雜湊值粘貼到配置文件中的相關欄位。
- 保存然後重新啟動cntlm,它可以工作。