You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 02:10:31