Добавление ключа SSH к пользователю конвейера Azure DevOps через DevOps Rest API

Я хочу добавить открытый ключ SSH в учетную запись Azure DevOps, в которой работает мой конвейер yaml. Согласно этому сообщению: Azure DevOps API Добавить открытый ключ это возможно на какой-то момент для загрузки открытого ключа при аутентификации с помощью токена 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.

Мы очень приветствуем советы о том, как загрузить сертификат в Azure DevOps с помощью PowerShell или любого другого параметра командной строки.

ОБНОВИТЬ:

Я попытался извлечь идентификатор аутентификации из сообщения на портале, как описано Хью Лином - MSFT: Портальная загрузка нового открытого ключа SSH

Затем я извлек идентификатор авторизации и добавил его в полезную нагрузку нового сообщения. Перед публикацией я также изменил displayName и Public data, сделав так, чтобы тело выглядело так:

{
"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 [email protected]",       
    "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              :

И портал тоже явно обновился:  введите описание изображения здесь


person Axel Andersen    schedule 23.07.2020    source источник
comment
В предыдущем тесте я только заметил, что имя было успешно заменено, но не заметил, были ли заменены ключевые данные. После тестирования я могу воспроизвести вашу проблему, и ключевые данные не могут быть заменены. Поэтому я думаю, что в настоящее время Azure Devops не должны поддерживать использование rest api для загрузки ключа ssh.   -  person Hugh Lin    schedule 27.07.2020
comment
Удобнее будет добавить ключ ssh через UI. Я обновил ответ и отправил для вас запрос функции. Извините за неправильное руководство.   -  person Hugh Lin    schedule 27.07.2020


Ответы (1)


Боюсь, что в настоящее время azure DevOps не поддерживает загрузку ключей ssh ​​через rest api. Официальный документ также не предоставляет остальной api, который может реализовать эту функцию. В настоящее время мы можем добавить открытый ключ ssh только через пользовательский интерфейс.

Помимо отрицательного ответа, я думаю, что то, что вы хотите, - это хорошая идея! Поэтому я отправляю запрос функции здесь на форуме DC. Вы можете проголосовать за этот запрос и поделиться там своим комментарием. Команда продукта предоставит обновления, если они его просмотрят. Спасибо за то, что помогли нам улучшить Azure DevOps.

person Hugh Lin    schedule 24.07.2020
comment
Спасибо, Хью. Я действительно хочу загрузить ключ ssh в учетную запись конвейера, чтобы он мог пройти аутентификацию с помощью Terraform. Мы активно используем модули, которые хранятся в отдельных репозиториях в Azure DevOps. К сожалению, исходный код модулей поддерживает только ssh. Нам нужна лицензионная учетная запись, чтобы иметь для этого ssh-ключ. - person Axel Andersen; 27.07.2020
comment
Вышеупомянутое голосование предназначено для visualstudio.com. Вот запрос для Azure DevOps, проголосуйте за него! - person KargWare; 08.07.2021