Azure DevOps CI/CD流水线权限拒绝问题排查与解决
问题场景
我正在构建一条CI/CD流水线,用于将Azure DevOps Repo中的代码推送到Ubuntu Azure VM服务器的本地仓库。运行指定YAML流水线时出现权限拒绝错误,无法读取远程仓库。
错误信息
尝试建立SSH连接到***@4.---.---.---:22
连接成功。执行cd /webdata/www/apps/src git pull origin master后,返回:
##[error]Permission denied, please try again.
##[error]Permission denied, please try again.
##[error]git@ssh.dev.azure.com: Permission denied (password,publickey).
##[error]fatal: Could not read from remote repository.
请确保您拥有正确的访问权限且仓库存在。
使用的YAML代码
trigger: - main pool: vmImage: ubuntu-latest steps: - task: SSH@0 inputs: sshEndpoint: 'devops-pipeline-sc' runOptions: 'commands' sshCommonArgs: '-o StrictHostKeyChecking=no' commands: | cd /webdata/www/apps/src git pull origin master # Pulling changes from the remote master branch readyTimeout: '20000'
解决方案
在Ubuntu VM上配置SSH密钥对
- 在Ubuntu VM终端执行
ssh-keygen -t rsa -b 4096 -C "你的邮箱地址",全程按回车使用默认配置生成密钥对。 - 执行
cat ~/.ssh/id_rsa.pub,复制输出的公钥全部内容。 - 登录Azure DevOps,进入目标仓库的设置 -> SSH密钥,点击添加,粘贴公钥内容并设置名称后保存。
- 在Ubuntu VM终端执行
验证VM上Git仓库的远程地址
在VM上进入/webdata/www/apps/src目录,执行git remote -v检查远程地址是否为Azure DevOps仓库的SSH格式(格式应为git@ssh.dev.azure.com:v3/{组织名}/{项目名}/{仓库名})。若地址错误,执行git remote set-url origin git@ssh.dev.azure.com:v3/{组织名}/{项目名}/{仓库名}更新。修正VM上SSH密钥的权限
确保密钥文件权限符合SSH安全要求:- 执行
chmod 700 ~/.ssh - 执行
chmod 600 ~/.ssh/id_rsa - 执行
chmod 644 ~/.ssh/id_rsa.pub
- 执行
添加SSH连接测试(可选)
可以在流水线的SSH任务中先添加测试命令,验证VM与Azure DevOps的SSH连通性:commands: | cd /webdata/www/apps/src ssh -T git@ssh.dev.azure.com # 测试SSH连接有效性 git pull origin master
内容的提问来源于stack exchange,提问作者Nurul Ansar

