企业代理认证的替代方案——替代cntlm

7
我正在一家使用代理连接互联网的公司工作。我的一些应用程序,特别是任何类型的软件包管理器都无法连接到代理,并产生407(需要代理身份验证)错误。
作为第一次尝试,我尝试手动为每个应用程序设置代理设置。 例如:
python -m pip install six --proxy http://user:pass@proxy:port

这并没有帮助。

第二次尝试中,我设置了一个本地代理程序cntlm来处理身份验证。这仍然无济于事。

最终我发现我们使用的是Kerberos进行授权。我知道有一个针对cntlm的Kerberos身份验证补丁。但不幸的是,这个补丁在Windows上不可用。(或者我没找到)

另一个同事告诉我另一种解决方法是Windows 10 linux子系统,可以安装Unix版本的带有补丁的cntlm。这使代理授权成为可能。但是这对我没有帮助,因为我的机器运行的是Windows 7系统。

我的问题是: 有没有其他替代cntlm能够处理Kerberos授权过程的工具? (或者我错过了可以解决cntlm问题的东西?)


2
你最终找到解决方案了吗? - Eugène Adell
5个回答

3
我发现 https://github.com/genotrance/px 安装简单:
px --proxy=proxy.server.com --save
px --install

它不需要任何凭据。它使用通过Windows API登录的用户的凭据。

嗨,我正在尝试使用Px,但当我使用命令: px --install一个错误窗口弹出,显示以下错误:由于与64位Windows版本不兼容,程序或功能C:\Program Files\Px\px.exe无法启动或运行。请联系软件供应商。我不确定在哪里获取64位版本或解决此问题。提前致谢! - Hassan Qayyum
由于px只是一个Python程序,所以这个问题似乎与您的Python安装有关 - 您是否使用当前的64位版本的Python?您也可以按照文档建议通过Python安装px。 - dermoritz

1
你可以使用Winfoom。它适用于NTLM、Kerberos和PAC文件代理,但仅限于Windows系统。

@Kimi 请注册一个问题。您需要在调试模式下启动应用程序,然后将日志文件附加到问题中。 - user10871691

0
我在我的情况下找到了另一个适用于Python pip的工作解决方案。 我们有一个本地Azure DevOps服务器正在运行。 我在Azure DevOps服务器上设置了一个Python软件包源,以托管我们的内部软件包并缓存来自pypi的软件包。 不知何故,服务器通过我们的代理没有通信问题。 这个部分问题的解决方案是从这个内部源下载软件包,而不是从pypi下载。

0

我已经使用 CNTLM 几年了,并且一直很成功地使用它。虽然这个版本已经有相当长的时间没有更新了,但我还没有遇到与更新不足有关的问题,除了在 Windows 10 上作为服务运行时似乎无法运行。但是,当从命令行中使用它或者将其作为登录时启动的计划任务使用时,它可以正常工作。

我认为你遇到的问题并不是由 CNTLM 引起的,而实际上是 Python 的 PIP 包管理器的问题。我不知道具体有什么问题,只是在 Python 3.9.1 发布的时间线周围出现了问题。这个问题可能已经得到解决,但我还没有再尝试过并进行测试。

你的情况可能有所不同,但我以这种方式取得了最佳的成功率。主要目标是降级 PIP 版本,因为它似乎不能在代理后面正常工作。为了做到这一点,需要通过暂时绕过 https,在 cmd 提示符中运行以下命令:

注意应该是 https,而不是 https
set http_proxy=http://username:password@proxyUrl:proxyPort
set https_proxy=http://username:password@proxyUrl:proxyPort

如果已经设置了CNTLM,则可以使用此选项

set http_proxy=http://localhost:proxyPort
set https_proxy=http://localhost:proxyPort

然后降级 pip 并将其保持在期望的版本。 如果您升级 pip,则需要重新访问此过程以安装软件包:

python -m pip install pip==20.2.4

完成后请回到这里

set http_proxy=http://localhost:proxyPort
set https_proxy=https://localhost:proxyPort

从这里开始,您应该可以毫无问题地安装软件包。


在当前版本的pip中,我能够通过设置系统范围的HTTP_PROXY和HTTPS_PROXY环境变量来通过代理进行通信。 然而,这种解决方案并不是永久性的修复方法,因为当设置环境变量时,其他应用程序会停止工作。因此,我需要在需要时暂时启用它们,下载pip软件包,然后删除代理变量... - walkslowly

-2
通常情况下,您会配置代理以禁用这些服务的身份验证(为请求已知域的客户端IP设置白名单)。或者您可以在自己的网络中设置本地副本,然后所有客户端请求您自己的企业服务器。然后,您可以手动更新副本,或者让它通过无需身份验证的代理进行更新。但在所有情况下,让事情自动更新并不总是一个好主意(如果过程出现问题,您可能会面临严重问题)。

我认为白名单不是一个可选项,尽管我希望它是一个可选项。拥有一个内部存储库将是最好的解决方案,但正如你所说,自动更新不是一个好主意,而手动更新需要时间... 但昨天我终于在某种程度上让它工作了。接下来几天还需要进行一些进一步的研究和开发。我会随时向您更新。 - walkslowly

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接