解决 Azure DevOps Agent 的 SPNEGO 凭据错误问题

Azure DevOps Agent 在配置或运行时可能遇到 SPNEGO(Simple and Protected GSSAPI Negotiation Mechanism)凭据错误,通常表现为身份验证失败或连接问题。以下方法可帮助诊断和修复此类问题。

检查代理配置和服务主体名称(SPN)

确保代理配置正确且服务主体名称(SPN)已正确注册。SPN 是 Kerberos 身份验证的关键部分,用于唯一标识服务实例。使用 setspn 命令检查或注册 SPN:

setspn -Q HTTP/your-devops-server.domain.com

如果未找到 SPN,需为服务账户注册:

setspn -S HTTP/your-devops-server.domain.com your-service-account
验证 Kerberos 身份验证

确保 Kerberos 身份验证正常工作。通过 klist 命令检查当前会话的 Kerberos 票据:

klist

如果票据缺失或过期,使用 kinit 重新获取:

kinit your-service-account@DOMAIN.COM
更新代理和依赖组件

确保 Azure DevOps Agent 和依赖组件(如 .NET Framework 或运行时)为最新版本。旧版本可能存在已知的 SPNEGO 兼容性问题。通过以下命令更新代理:

./config.cmd --remove
./config.cmd --unattended --url https://your-devops-server --auth Negotiate --pool your-pool
检查网络代理和防火墙设置

网络代理或防火墙可能干扰 SPNEGO 协商。确保代理服务器允许 Kerberos 流量(端口 88 和 464)。在代理配置中排除 Azure DevOps Server 的域名:

netsh winhttp set proxy proxy-server="http=your-proxy:8080" bypass-list="*.your-devops-server.domain.com"
启用详细日志记录

通过启用详细日志记录进一步诊断问题。修改代理的 diag 日志级别:

./run.cmd --loglevel diag

检查日志中与 SPNEGO 或 Negotiate 相关的错误信息,例如:

[ERROR] Failed to authenticate using SPNEGO. Status: 0x80090303
验证服务账户权限

确保运行代理的服务账户具有足够的权限。账户需在 Active Directory 中具有“委派”权限以支持 SPNEGO。通过 Active Directory 用户和计算机工具配置:

  1. 找到服务账户的属性页。
  2. 在“委派”选项卡中,选择“信任此用户用于委派到任何服务(仅限 Kerberos)”。
测试 SPNEGO 功能

使用工具如 curlPostman 测试 SPNEGO 功能。以下命令测试 Kerberos 身份验证:

curl -v --negotiate -u : https://your-devops-server.domain.com

如果测试失败,需进一步检查 Kerberos 配置或网络问题。

参考微软官方文档

微软提供了关于 SPNEGO 和 Azure DevOps Agent 的详细文档。查阅以下资源以获取更多信息:

通过以上方法,可以系统性地解决 Azure DevOps Agent 的 SPNEGO 凭据错误问题。

更多推荐