Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure devops 通过DevOps Rest API向Azure DevOps管道用户添加SSH密钥_Azure Devops_Azure Devops Rest Api_Powershell Core - Fatal编程技术网

Azure devops 通过DevOps Rest API向Azure DevOps管道用户添加SSH密钥

Azure devops 通过DevOps Rest API向Azure DevOps管道用户添加SSH密钥,azure-devops,azure-devops-rest-api,powershell-core,Azure Devops,Azure Devops Rest Api,Powershell Core,我想向运行yaml管道的Azure DevOps帐户添加SSH公钥。根据这篇文章:当使用PAT令牌进行身份验证时,在某个时候上传公钥是可能的 我可以通过RESTAPI从我的管道访问Azure DevOps Rest API,并列出repo等,但我不知道如何为上传公共SSH密钥的查询构建主体。到目前为止,我有: $uri='1!'https://dev.azure.com/{MyOrg}/_用户设置/键' $Headers=@{Authorization='Basic';'content-type

我想向运行yaml管道的Azure DevOps帐户添加SSH公钥。根据这篇文章:当使用PAT令牌进行身份验证时,在某个时候上传公钥是可能的

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

$uri='1!'https://dev.azure.com/{MyOrg}/_用户设置/键'
$Headers=@{Authorization='Basic';'content-type'='application/json'}
$Body=@{
displayName='MyKey'
publicData='我的公钥以ssh rsa开头'
作用域='app_令牌'
isPublic=$true
}|转换为Json
调用RestMethod-Uri$Uri-Headers$Headers-Method-POST-Body$Body
上面的命令本身不会产生错误,只是生成一个长html

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

更新:

我尝试从门户中的帖子中提取身份验证Id,如Hugh Lin-MSFT所述:

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

{
"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              :
门户网站也得到了明确更新:

我担心当前azure devops不支持通过rest api上传ssh密钥。官方文档也没有提供可以实现此功能的RESTAPI。目前,我们只能通过UI添加公共ssh密钥


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

在上一次测试中,我只注意到名称已成功替换,但没有注意到是否替换了关键数据。经过测试,我可以重现您的问题,关键数据无法替换。所以我认为Azure Devops目前不应该支持使用rest api上传ssh密钥。通过UI添加ssh密钥会更方便。我更新了答案并为您提交了功能请求。对不起,我的指导错了。谢谢休。我真的很想上传一个ssh密钥到管道帐户,这样它就可以通过Terraform进行身份验证。我们是Azure DevOps中单独存储在repo中的模块的大量用户。不幸的是,模块上的源代码仅支持ssh。我们需要一个许可的帐户,只有一个ssh密钥。