MacOS及Windows本地自托管Agent无法认证本地Azure DevOps Server的问题求助
问题分析与解决方案
先梳理下核心矛盾:浏览器能正常通过管理员账号访问Azure DevOps Server,但自托管Agent(无论Mac还是Windows端)用相同凭据走Negotiate认证却失败,甚至Windows端还抛出TF400813匿名访问错误。这大概率是认证协议的支持差异和服务器/IIS的认证配置细节导致的,下面分步骤给出排查和解决方法:
一、先确认服务器端的基础配置是否正确
浏览器能访问不代表IIS和Azure DevOps Server的认证规则完全适配Agent的请求逻辑,先把服务器端的配置拉到位:
- 检查IIS的身份验证设置
- 登录Windows Server,打开IIS管理器,找到Azure DevOps对应的站点(默认是
Default Web Site)。 - 进入「身份验证」功能:
- 确保Windows身份验证已启用,右键点击它选择「提供程序」,确认
Negotiate和NTLM都在列表中(非域环境下NTLM是关键,Kerberos无法正常工作)。 - 禁用「匿名身份验证」,避免请求被误判为匿名访问。
- 确保Windows身份验证已启用,右键点击它选择「提供程序」,确认
- 登录Windows Server,打开IIS管理器,找到Azure DevOps对应的站点(默认是
- 确认Azure DevOps Server的认证模式
- 打开Azure DevOps Server管理控制台,进入「应用层」→「身份验证」,确认认证模式是
Negotiate,且没有勾选「要求使用HTTPS」(如果还在测试HTTP模式的话)。
- 打开Azure DevOps Server管理控制台,进入「应用层」→「身份验证」,确认认证模式是
二、解决Mac端Agent的认证失败问题
Mac系统对Negotiate认证的支持和浏览器有差异,浏览器可能自动处理了NTLM的凭据传递,但Agent脚本需要更明确的配置:
- 尝试明确使用NTLM认证类型
运行./config.sh时,当提示选择认证类型,不要选默认的Negotiate,手动输入大写的NTLM,再输入管理员账号和密码。部分Agent版本在非域Mac环境下,NTLM的兼容性比Negotiate更好。 - 匹配Agent与服务器的版本
你当前用的Mac Agent是2.190.0,而服务器是Azure DevOps Server 2020 Update 1.1,版本不匹配可能导致认证逻辑冲突。建议直接从服务器仪表盘的「代理池」→「下载代理」获取对应版本的Agent包,再重新配置。 - 在Mac钥匙串中预存NTLM凭据
打开「钥匙串访问」,添加一条新的「互联网密码」:- 服务器地址填你的Azure DevOps Server IP(比如
http://xxx.xxx.xxx.xxx) - 用户名填
Administrator,密码填对应凭据
保存后重新运行./config.sh选择Negotiate,看是否能自动拾取凭据完成认证。
- 服务器地址填你的Azure DevOps Server IP(比如
三、解决Windows端Agent的认证问题(辅助排查)
Windows端的TF400813错误说明Agent的请求被当作匿名请求处理,大概率是本地策略或权限问题:
- 调整本地安全策略的NTLM级别
打开「本地安全策略」→「本地策略」→「安全选项」,找到「网络安全: LAN管理器身份验证级别」,设置为「发送NTLMv2响应\拒绝LM & NTLM」或更低级别(比如「发送LM & NTLM - 如果协商,则使用NTLMv2会话安全」),确保NTLM认证被系统允许。 - 用管理员权限运行配置脚本
右键PowerShell选择「以管理员身份运行」,再执行Agent的配置脚本,避免权限不足导致凭据无法正常传递。 - 尝试Integrated认证类型
如果是用Administrator账号登录Windows Server,直接按回车选择Integrated认证类型,让Agent使用当前登录用户的凭据,看是否能绕过Negotiate的问题。
四、HTTPS+PAT认证的正确配置(如果之前尝试失败)
如果你之前启用HTTPS用自签名证书失败,大概率是Agent不信任自签名证书,按下面步骤重新配置:
- 生成正确的自签名证书
在Windows Server上生成证书时,确保证书的**主体名称(CN)**和服务器的IP/FQDN完全匹配(比如用IP访问的话,CN就填xxx.xxx.xxx.xxx)。 - 让Agent信任自签名证书
- Mac端:双击证书文件,导入到「系统」钥匙串,右键证书→「显示简介」→「信任」,将「使用此证书时」设置为「始终信任」。
- Windows端:将证书导入到「受信任的根证书颁发机构」存储中。
- 配置Azure DevOps Server使用HTTPS
在Azure DevOps Server管理控制台中,将应用层URL改为HTTPS(比如https://xxx.xxx.xxx.xxx/MyProjectCollection),重启服务器服务。 - 生成并使用PAT
在Azure DevOps仪表盘点击用户头像→「个人访问令牌」,创建一个拥有Agent Pools (Read & Manage)和Deployment Groups (Read & Manage)权限的PAT,然后在配置Agent时选择PAT认证类型,输入该令牌即可。
额外排查点
- 检查服务器防火墙:确保Mac/Windows能访问服务器的80(HTTP)或443(HTTPS)端口,没有被防火墙拦截。
- 查看Agent诊断日志:Mac和Windows端的Agent目录下都有
_diag文件夹,日志里会详细记录认证失败的具体原因(比如NTLM握手失败、Kerberos票据获取失败等),可以根据日志进一步定位问题。
内容的提问来源于stack exchange,提问作者Maxime Esprit
相关产品推荐
相关产品推荐

