排查 curl 中的 NTLM 代理登录问题
NTLM 代理拒绝登录时,检查 curl 构建支持、代理认证质询及连接连续性。
NTLM 代理认证需要握手,并非只附上一次用户名。修改账户密码前,先确认代理确实提供 NTLM 认证,且所用 curl 可执行文件支持它。
curl --version
查看实际执行请求的可执行文件所列出的功能。另一份已安装的 curl、容器镜像或操作系统构建可能支持不同的认证方式。
选择专用于代理的认证方法
curl --proxy http://proxy.example:3128 --proxy-ntlm --proxy-user 'EXAMPLE\alice' --noproxy '' --connect-timeout 5 --max-time 20 https://example.com/
端点、域和用户名均为示例。请使用管理员提供的格式。参数中不包含密码时,curl 可以提示输入,避免把秘密留在显示的命令中。
初始认证质询可能是协商的一部分。应将其与完成握手后仍被拒绝的情况区分开。不要使用面向源站的 NTLM 选项来回答代理的认证质询。
排查时也要考虑连接行为
NTLM 的状态以连接为作用域。握手必须沿预期连接路径完成;在各阶段之间反复更换连接,可能使握手无法完成。
应用使用 libcurl 时,应让库管理认证和连接复用。不要构建把不同身份已认证连接视为可互换资源的通用连接池。若涉及多跳或中间服务,检查它是否保留所需的连接安排。
如果功能支持和方法选择都正确,继续检查账户格式、域策略,以及服务器上已脱敏的认证日志。在任何质询出现前超时,仍属于可达性问题,不能证明 NTLM 密码错误。
详细跟踪可能包含认证令牌和内部名称。请在本地使用,并在分享前脱敏;公开错误报告不需要原始令牌交互。