如何在Azure DevOps构建流水线中添加SSH服务连接并授权所有流水线?
在Azure DevOps中创建SSH服务连接并配置全流水线访问权限
Azure DevOps目前没有直接通过构建流水线任务创建SSH服务连接的内置功能,你可以通过以下两种方式实现需求:
一、手动创建SSH服务连接(快速操作)
- 打开Azure DevOps项目,点击左下角项目设置(齿轮图标)
- 左侧菜单选择服务连接,点击右上角新建服务连接
- 选择SSH类型,点击下一步
- 填写核心信息:
- 连接名称:自定义易识别的名称
- 主机名:目标服务器IP地址
- 端口:默认22,按需修改
- 用户名:指定的SSH登录用户名
- 认证方式选SSH密钥,粘贴私钥内容(注意是私钥而非公钥),有密钥密码则填写
- 勾选授予所有流水线对此服务连接的访问权限,点击保存即可
二、通过REST API在流水线中自动化创建
如果需要通过流水线完成创建,可调用Azure DevOps REST API实现:
1. 准备个人访问令牌(PAT)
- 点击右上角个人头像→个人访问令牌
- 创建令牌时勾选**Service Connections (Read, manage)**权限,保存好令牌
2. 配置流水线
- 在流水线中添加秘密变量
AZURE_DEVOPS_PAT,值为刚才生成的PAT(勾选保密选项) - 添加PowerShell任务,插入以下脚本(替换占位符为实际信息):
$orgUrl = "https://dev.azure.com/你的组织名" $projectName = "你的项目名" $serviceConnectionName = "自定义SSH连接名称" $pat = $env:AZURE_DEVOPS_PAT $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$pat")) # 构造SSH服务连接请求体 $body = @" { "name": "$serviceConnectionName", "type": "ssh", "url": "ssh://目标服务器IP:22", "authorization": { "scheme": "sshPublicKey", "parameters": { "username": "你的SSH用户名", "privateKey": "你的私钥内容(将换行符替换为\\n)", "passphrase": "密钥密码(无则留空)" } }, "data": { "host": "目标服务器IP", "port": "22" }, "isReady": true, "serviceEndpointProjectReferences": [ { "projectReference": { "id": "你的项目ID(从项目设置→概述获取)", "name": "$projectName" }, "name": "$serviceConnectionName", "description": "" } ], "grantAllPermissions": true } "@ # 调用API创建服务连接 Invoke-RestMethod -Uri "$orgUrl/$projectName/_apis/serviceendpoint/endpoints?api-version=7.1-preview.4" ` -Method Post ` -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} ` -ContentType "application/json" ` -Body $body
注意事项
- 私钥内容中的换行符需替换为
\\n,避免JSON解析错误 - 项目ID可在项目设置→概述页面获取
grantAllPermissions": true参数用于自动授予所有流水线访问权限
内容的提问来源于stack exchange,提问作者neelam
相关产品推荐
相关产品推荐

