如何从Azure DevOps Pipeline在Azure VM主机执行命令?遇SSH认证失败
解决Azure DevOps Pipeline SSH连接Azure VM认证失败的问题
排查步骤与解决方案
1. 核对SSH服务连接的认证配置
- 密钥格式校验:Azure DevOps要求SSH私钥为未加密的PEM格式,本地可连接不代表格式符合要求。若你使用的是OpenSSH格式私钥,需转换为PEM:
ssh-keygen -p -m PEM -f /path/to/your/private-key - 公钥部署检查:登录Azure VM,确认
~/.ssh/authorized_keys文件中的公钥是完整单行,无换行或冗余字符,同时修正权限:chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
2. 检查Azure VM的SSH服务设置
- 认证方式配置:编辑
/etc/ssh/sshd_config,确保启用对应认证方式:
修改后重启SSH服务:PubkeyAuthentication yes PasswordAuthentication no # 若使用密码认证则改为yes# Ubuntu/Debian sudo systemctl restart sshd # RHEL/CentOS sudo service sshd restart - 网络访问限制:检查Azure VM的网络安全组(NSG),确保允许Azure DevOps代理的IP访问22端口。可临时将22端口开放至所有IP(仅测试用,测试后需收紧),排除IP拦截问题。
3. 验证Azure DevOps代理的网络环境
- 自托管代理:确认代理服务器能访问Azure VM的公网/私有IP(同VNet场景),且代理服务器防火墙未拦截22端口出站流量。
- 托管代理:使用微软托管代理时,需将Azure DevOps对应区域的IP范围加入VM的NSG允许列表,可通过Azure CLI查询:
az network list-service-tags --location <你的VM所在区域> --query "values[?properties.systemService=='AzureDevOps'].properties.addressPrefixes" -o tsv
4. 启用SSH verbose日志定位问题
在Pipeline中添加测试步骤,输出详细SSH连接日志:
- script: | ssh -v -i /path/to/private-key 你的用户名@VM-IP地址 displayName: 'Verbose SSH Test'
通过日志中的认证阶段细节,精准定位是密钥不匹配、权限错误还是其他认证环节故障。
内容的提问来源于stack exchange,提问作者user2647567
相关产品推荐
相关产品推荐

