Azure DevOps自托管Agent拉取子模块时SSH主机密钥验证失败
Azure DevOps自托管Agent子模块拉取SSH验证失败修复方案
1. 检查子模块远程地址是否为SSH格式
主仓库拉取成功是因为InstallSSHKey@0配置的密钥对应SSH协议,但如果子模块用的是HTTPS地址,会绕过SSH密钥验证导致权限失败。
- 本地仓库执行
git submodule status查看子模块地址 - 若为HTTPS,修改为SSH格式:
git submodule set-url <子模块路径> git@ssh.dev.azure.com:v3/<组织名>/<项目名>/<子模块仓库名> - 提交修改并推送到主仓库:
git add .gitmodules git commit -m "切换子模块地址为SSH格式" git push
2. 确保Known Hosts配置完整且生效
Windows环境下,InstallSSHKey@0生成的known_hosts可能未被子模块拉取的Git进程读取,需确保配置完整:
- 重新执行
ssh-keyscan ssh.dev.azure.com获取完整的host key,替换yml中knownHostsEntry的内容,不要省略字符 - 或者在流水线中手动写入known_hosts:
- script: | mkdir -p %USERPROFILE%\.ssh echo ssh.dev.azure.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC7Hr1oTWqNqOlzGJOfGJ4NakVyIzf1rXYd4d7wo6jBlkLvCA4odBlL0mDUyZ0/QUfTTqeu+tm22gOsv+VrVTMk6vwRU75gY/y9ut5Mb3bR5BV58dKXyq9A9UeB5Cakehn5Zgm6x1mKoVyf+FFn26iYqXJRgzIZZcZ5V6hrE0Qg39kZm4az48o0AUbf6Sp4SLdvnuMa2sVNwHBboS7EJkm5swtJm0mYYiLaxsPTOGWJmDW8wUw2o8U77+FxnOHbKUfD56yvqMjJ7lFlLbUcIF四川UfOaM0D6p1lULW5Qvj2wHh3jR1Kl8FqplPm6rF5hNcacwP3d9G6KDLmXl13/DAa+Tiaxw2 >> %USERPROFILE%\.ssh\known_hosts displayName: '手动添加Azure DevOps到known_hosts'
3. 排查Agent运行用户权限
Windows Server上的Agent运行用户可能没有.ssh目录或工作目录的读写权限,导致密钥无法加载:
- 打开服务管理器,找到Azure DevOps Agent服务,查看“登录身份”
- 确保该用户对
C:\agent\_work和%USERPROFILE%\.ssh目录有读写权限 - 可临时切换为管理员用户运行Agent,验证是否解决问题
4. 确认子模块仓库的SSH权限配置
主仓库的SSH公钥已配置,但子模块仓库可能未添加该公钥:
- 登录Azure DevOps,进入子模块对应的仓库,打开
设置 > 仓库 > SSH公钥 - 确认是否添加了同一公钥,若没有则添加
内容的提问来源于stack exchange,提问作者JuanDYB
相关产品推荐
相关产品推荐

