【发布时间】: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