NTLM代理背后的NPM


Answers:


130

我通过以下方式解决了此问题(操作系统:Windows XP SP3):

1.下载CNTLM安装程序并运行它。

2.在cntlm.ini中找到并填写这些字段。不要填写该Password字段,在文本文件中存储未加密的密码永远不是一个好主意。

Username    YOUR_USERNAME
Domain      YOUR_DOMAIN
Proxy       YOUR_PROXY_IP:PORT
Listen      53128

3.打开控制台,然后键入以下命令以生成密码哈希。

> cd c:\the_install_directory_of_cntlm
> cntlm -H
Password: ...type proxy password here...
PassLM          D6888AC8AE0EEE294D954420463215AE
PassNT          0E1FAED265D32EBBFB15F410D27994B2
PassNTLMv2      91E810C86B3FD1BD14342F945ED42CD6

4.将以上三行复制到该Domain字段下的cntlm.ini中。再一次,不要填写该Password字段。保存cntlm.ini。

5.打开服务管理器(从命令行:services.msc),然后启动名为“ CNTLM身份验证代理”的服务。

6.在控制台中,键入以下行:

> npm config set proxy http://localhost:53128
> npm config set https-proxy http://localhost:53128
> npm config set registry https://registry.npmjs.org

7.现在npm viewnpm install等应能正常工作。例:

> npm view qunit
...nice answer, no errors :)

7
您可以使用net start cntlm
adhocgeek

2
要对CNTLM使用NTLM授权,请遵循以下说明:1.在步骤2之后,运行此命令行命令cntlm -I -M google.co.in 2.提示输入域密码-将其复制到cntlm.ini并重新启动服务3。下面生成密码哈希验证NTLM PassNT XXXXXXXXXXXXXXXXXXXXXXXXXX PassLM XXXXXXXXXXXXXXXXXXXXXXXXXX
阿马尔

1
伟大的解决方案,谢谢,一个注意事项-地址URL上方的第6点应以http而不是https开头
Mike

4
@MichalBernhard不知道这是否是正确的答案,但是我注意到当注册表设置为default(https://registry.npmjs.org)时npm install <pkg>@<version>,“”操作会“卡住”:fetchMetadata: http fetch GET 304 https://registry.npmjs.org/isurl 280ms (from cache)fetchMetadata: sill resolveWithNewModule uuid@2.0.3 checking installable status。一旦按照答案中的建议更改了注册表,一切都可以正常工作。
Spencer R

1
在Windows 10中npm ERR! code E418 npm ERR! 418 I'm a teapot - GET http://registry.npmjs.org/create-react-app - got unknown host (registry.npmjs.org:80) npm ERR! A complete log of this run can be found in: npm ERR! C:\Users\faizanmubasher\AppData\Roaming\npm-cache\_logs\2019-08-22T07_22_44_767Z-debug.log Install for create-react-app@latest failed with code 1
无法

11

CNTLM答案对我有用,但是由于连接错误而使npm无法使用。我通过在CNTML中添加此标头来修复它们。

Header      Connection: close

嗨,Toilal,当您通过npm安装执行许多请求时是否需要该标头,因为随后由于网络问题而导致20次npm停止...在签出回购协议后进行初始npm安装时,是否可以解决此问题?
HelloWorld

@HelloWorld似乎是这样。(旧答案,我不必再使用CNTML)
Toilal

我现在使用python代理px,效果更好/更稳定!
HelloWorld

10

另一个替代方法是使用Windows Px,它可以代表您与Cntlm和NTLMAps等NTLM通讯,而无需提供凭据。它通过SSPI使用登录的用户凭据。


1
试了一下,效果很好-与CNTLM一样好。不再需要哈希密码管理!我喜欢。
拉比德

2
感谢您使用此工具!这绝对是该线程的答案!我无法使cntlm工作,我的凭据始终被代理拒绝(407)。Px就像一个魅力!
Gregory_Ott

1
真是的!这个很棒的工具!当cntlm挂起时,npm可以很好地与px配合使用。
Renat Zaripov

PX为我工作,而CNTLM没有。一般而言,PX还可以与maven,IntelliJ和JVM顺利配合。
user1884155 '19

8

您无需运行CNTLM,而可以在需要使用npm时尝试运行Fiddler。我发现这在相当封闭的环境(例如投资银行)中有效。这也是一种很容易为您提供业务案例的工具(如果需要),因为它对于检查/创建/更改HTTP流量非常宝贵。

由于使用了SmartPass身份验证,我不得不走这条路-即我们实际上没有密码。在那些位置设置CNTLM是不可能的。


2
在启用该规则之前,我一直无法正常工作 Automatically Authenticate
JonathanTech

6

您可以将设置作为参数传递:

npm --proxy=http://username:password@proxyserver:port --proxy-https=http://username:password@proxyserver:port --registry=http://registry.npmjs.org/ install whateveryouwanttoinstall

5
这是基本身份验证,不是NTLM。
kol,2015年

3
@kol,是的,但是经常使用NTLM身份验证的代理也允许基本身份验证。我认为,此方法的问题在于将其个人密码存储在NPM配置中。
mcoolive

1
是不是https-proxy而不是proxy-https?
Srichakradhar

我拒绝投票是因为这是基本身份验证,并且大多数ntlm代理也允许基本身份验证是不正确的。这完全由系统管理员决定,而不是通常为“ true”的某些默认值。
user1884155 '19

5

CNTLM对我不起作用。我尝试了所有可能的组合。NPM正在提供身份验证错误。提琴手来救援,节省了我的时间。易于安装和配置。将Fiddler Rule设置为自动认证。在.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

它对我有用:)

另一个提琴手选项:

使Fiddler充当NTLM和其他协议的HTTP代理的第二种方法是保留自动身份验证选项/规则默认值,然后从菜单栏中转到此设置:

工具> Telerik Fiddler选项>连接选项卡

单击“允许远程计算机连接”复选框。您将看到一个对话框,说明启用此选项的后果。重新启动Fiddler并更新.npmrc文件,如上所示。每当需要npm来访问注册表站点时,只需运行Fiddler。此设置不会影响Fiddler进行其他捕获的方式。


您仍然可以使用cntlm,只需将那些代理行设置为cntlm.ini文件中的侦听端口即可。如果您要使用凭据向代理进行身份验证,则需要
CNTLM

5
  1. .npmrc使用记事本在C:\ users \ username \文件夹中打开文件
  2. 添加以下行。
  3. 用正确的值替换域,用户名,密码,服务器名
  4. 立即尝试安装或获取软件包
  5. 如果尝试使用Vs2017,请关闭并重新打开VS IDE,然后才能正常使用

    proxy=http://DOMAIN%5CUSERNAME:PWD@proxy.servername.com:6050   
    https-proxy=http://DOMAIN%5CUSERNAME:PWD@proxy.servername.com:6050  
    http-proxy=http://DOMAIN%5CUSERNAME:PWD@proxy.servername.com:6050   
    strict-ssl=false
    

这对我有用。我要做的就是对值进行urlencode。我的密码有一些特殊字符。
ferosekhanj

0

CNTLM按照KOL的建议为我工作。感谢KOL。只是想补充一点,个别代理中有一些奇怪之处,因此使用simple时可能无法接受密码cntlm -H

cntlm -I -M http://test.com删除较旧的配置后,请使用并复制以下配置,您应该已完成。

输出就像

---------------------------------------------------
Auth            NTLM
PassNT          8EE9B595A89F7D8774C2146FB302CBCF
PassLM          78901DA9889727EDE28EF9F2769485B9
----------------------------------------------------
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.