Proxy

npm install 在一個代理後面但得到 Http Error=407(Forefront TMG 需要授權)

  • October 17, 2018

作業系統是 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?

最後找出解決方案

  1. 不要使用純文字密碼#(在行首添加一個Password,例如更改Password XXX#Password XXX
  2. 改用PassLMPassNTPassNTLMv2(似乎雜湊值將再次阻止身份驗證握手機制,這應該意味著您代表已登錄 Windows 使用者帳戶的應用程序)。

預設的 cntlm 配置文件已經介紹瞭如何生成它們的步驟。

我的步驟如下:

  1. 執行cntlm -H -d your_domain -u your_username
  2. 然後它會提示密碼,填寫您的密碼,然後按 Enter

輸出將如下所示:

Password:
PassLM          F5314AF8A2DB16BDB7EE9FA6CFC5BC9A
PassNT          4EC02E0D65F8F0C1A9386C69CB6A2555
PassNTLMv2      28B089518C6573274C6B9D83D0EB8651 
  1. 將上述雜湊值粘貼到配置文件中的相關欄位。
  2. 保存然後重新啟動cntlm,它可以工作。

引用自:https://serverfault.com/questions/936001