【问题标题】:Add SSH key to Azure DevOps pipeline user via DevOps Rest API通过 DevOps Rest API 向 Azure DevOps 管道用户添加 SSH 密钥
【发布时间】:2020-11-13 08:18:51
【问题描述】:

我想向运行我的 yaml 管道的 Azure DevOps 帐户添加 SSH 公钥。根据这篇文章:Azure DevOps API Add public key 在使用 PAT 令牌进行身份验证时可以上传公钥。

我可以从我的管道访问 Azure DevOps Rest API,并通过 Rest API 列出存储库等,但我不知道如何为上传公共 SSH 密钥的查询构建主体。到目前为止,我有这个:

$uri = 'https://dev.azure.com/{MyOrg}/_usersSettings/keys'
$Headers = @{Authorization='Basic <encoded PAT>';'content-type'='application/json'}
$Body = @{
    displayName = 'MyKey'
    publicData = 'My Public Key starting with ssh-rsa '
    scope = 'app_token'
    isPublic = $true
    } | ConvertTo-Json
Invoke-RestMethod -Uri $uri -Headers $Headers -Method POST -Body $body

上面的命令不会产生这样的错误,只是一个很长的 html。

非常欢迎提供有关如何通过 PowerShell 或任何其他命令行选项将证书上传到 Azure DevOps 的提示。

更新:

我尝试按照 Hugh Lin - MSFT 的描述从门户中的帖子中提取身份验证 ID:

然后我提取了授权 ID 并将其添加到新帖子的有效负载中。在发布之前,我还更改了 displayName 和 Public 数据,使 body 看起来像这样:

{
"contributionIds": ["ms.vss-token-web.personal-access-token-issue-session-token-provider"],
"dataProviderContext": {"properties": {
    "displayName": "AutoKey",
    "authorizationId": "48bef66f-798e-499b-94cc-720e48296bf7",
    "publicData": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDZA//Y+7vLd+P2F4WmIHpBPEMn/lPHPXrxHEJhhtnrNNZzgwIkWpgGQcuGQt2rmxEWYsSEV+CxTZcO7jig0yr8rsntUZJnCc86SVP22AfvE1rmRM/k+m6QRCBrSoHCAR+2ho/XoJ8iuZdvIV7qvV0Vk/N9rnf+KsJlK97RQWSc61rPl+7cUeXkBB8qsWOMeVxe9NhWH8DeWV+JG0nroTaZDrTq9BI5UDc7kqrRgwPCvqwT749C3k3cijxqEvK5bwWZ5NFaGj4CW8qRGXR5Sf6GJlQLgOrH+V2R7Ns5kLunD/Yy6RvSUiwokCyb3tDqBgB3W9lEtuxqcaYUwig0/GIF axel@me.com",       
    "scope": "app_token",
    "targetAccounts": ["67ebc765-c850-4d22-b95f-1d3553xxxxxx"],
    "isPublic": true,
    "sourcePage": {
        "url": "https://dev.azure.com/cloudeonwest/_usersSettings/keys",
        "routeId": "ms.vss-admin-web.user-admin-hub-route",
        "routeValues": {
            "adminPivot": "keys",
            "controller": "ContributedPage",
            "action": "Execute",
            "serviceHost": "67ebc765-c850-4d22-b95f-1d3553bxxxxxx (Org)"
        }
    }
}}
}

运行请求导致 displayName 被更新,但 publicData 保持不变:

$answer.dataProviders.'ms.vss-token-web.personal-access-token-issue-session-token-provider'

clientId            : 00000000-0000-0000-0000-000000000000
accessId            : 52447de9-8c41-4d5b-bfdb-48b4eaxxxxxx
authorizationId     : 48bef66f-798e-499b-94cc-720e48296bf7
hostAuthorizationId : 00000000-0000-0000-0000-000000000000
userId              : 357d38ad-6712-69e1-adc3-be8caxxxxxx
validFrom           : 7/25/2020 3:26:51 PM
validTo             : 7/25/2025 3:26:51 PM
displayName         : AutoKey
scope               : app_token
targetAccounts      : {67ebc765-c850-4d22-b95f-1d3553xxxxxx}
token               :
alternateToken      :
isValid             : True
isPublic            : True
publicData          : BBBAB3NzaC1yc2EAAAADAQABAAABAQDZA//Y+7vLd+P2F4WmIHpBPEMn/lPHPXrxHEJhhtnrNNZzgwIkWpgGQcuGQt2rmxEWYsSEV+CxTZcO7jig0yr8rsntUZJnCc86SVP22AfvE1rmRM/k+m6QRCBrSoHCAR+2ho/XoJ8iuZdvIV7qvV0Vk/N9rnf+KsJlK97RQWSc61rPl+7cUeXkBB8qsWOMeVxe9NhWH8DeWV+JG0nroTaZDrTq9BI5UDc7kqrRgwPCvqwT749C3k3cijxqEvK5bwWZ5NFaGj4CW8qRGXR5Sf6GJlQLgOrH+V2R7Ns5kLunD/Yy6RvSUiwokCyb3tDqBgB3W9lEtuxqcaYUwig0/GIF
source              :
claims              :

门户网站也明显更新:

【问题讨论】:

  • 在之前的测试中,只注意到name被替换成功,没有注意到Key Data是否被替换。经过测试,我可以重现您的问题,并且无法替换Key Data。所以我认为Azure Devops目前应该不支持使用rest api上传ssh key。
  • 通过UI添加ssh key会更方便。我更新了答案并为您提交了功能请求。抱歉指导错误。

标签: azure-devops azure-devops-rest-api powershell-core


【解决方案1】:

恐怕目前 azure devops 不支持通过 rest api 上传 ssh 密钥。官方文档也没有提供可以实现这个功能的rest api。目前我们只能通过UI添加公钥

除了否定的答案,我认为你想要的是一个好主意!所以我在 DC 论坛上发布了功能请求here。您可以对该建议票进行投票并在那里分享您的评论。如果产品团队看到它,他们会提供更新。感谢您帮助我们构建更好的 Azure DevOps。

【讨论】:

  • 谢谢休。我真的想将 ssh 密钥上传到管道帐户,以便它可以使用 Terraform 进行身份验证。我们是 Azure DevOps 中保存在单独存储库中的模块的重度用户。不幸的是,模块上的源代码只支持 ssh。我们需要一个许可帐户才能拥有一个 ssh 密钥。
  • 以上投票是针对visualstudio.com的。 Here 是“Azure DevOps”的查询,请在那里投票!
猜你喜欢
  • 1970-01-01
  • 2019-03-10
  • 1970-01-01
  • 2021-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多