如何通过Azure DevOps流水线用PowerShell连接Azure Linux VM(SSH密钥存于安全库)
在Azure DevOps流水线中用PowerShell连接Linux VM并调用AZ CLI
1. 先从Library下载SSH私钥
在流水线里添加「下载安全文件」任务,选中你存在Library安全文件夹里的.pem文件。任务会自动把文件下载到代理机器的临时路径,同时生成$(pemFilePath)环境变量指向该路径。
2. 调整私钥权限*(必做)*
Linux系统要求SSH私钥权限不能太宽松,在PowerShell脚本里执行以下命令调整:
# 把Windows路径转成Linux格式(如果用Ubuntu托管代理) $linuxPemPath = $env:pemFilePath.Replace('\', '/') # 设置权限为600,避免SSH报错 Invoke-Expression "chmod 600 $linuxPemPath"
3. 用AZ CLI获取VM公网IP
如果VM公网IP不固定,可通过AZ CLI查询:
# 流水线配置服务连接后可跳过手动登录步骤 az login --service-principal -u $env:AZURE_CLIENT_ID -p $env:AZURE_CLIENT_SECRET --tenant $env:AZURE_TENANT_ID # 查询VM公网IP,替换为你的资源组和VM名称 $vmPublicIp = az vm show -g <你的资源组名> -n <你的VM名称> --query "publicIps" -o tsv
4. 连接Linux VM并执行操作
有两种常用方式:
方式1:直接SSH连接执行命令
# 替换为VM登录用户名,执行目标Linux命令 ssh -i $linuxPemPath <VM用户名>@$vmPublicIp "cat /etc/os-release"
方式2:用AZ CLI的Run Command(无需开放22端口)
如果NSG未开放22端口给代理,可通过AZ CLI的run-command执行脚本:
az vm run-command invoke -g <你的资源组名> -n <你的VM名称> --command-id RunShellScript --scripts "sudo apt update && sudo apt upgrade -y"
关键注意点
- 确保流水线代理IP在VM的NSG规则中被允许访问22端口(使用SSH方式时)
- 流水线服务连接需要拥有VM所在资源组的「虚拟机参与者」权限
- 使用Windows代理时,需先安装OpenSSH客户端,或调用WSL内的ssh命令
内容的提问来源于stack exchange,提问作者OoO
相关产品推荐
相关产品推荐

