Как добавить ключ SSH в Gitlab через исполняемый файл bash?

Я создаю исполняемый файл bash, который создает ключ SSH и загружает его в учетную запись пользователя Gitlab. Я знаю, как создать ключ SSH с помощью исполняемого файла bash:

ssh-keygen -o -f ~/.ssh/id_rsa

, и я также знаю, как извлечь его, однако я не знаю, как загрузить его в учетную запись пользователя Gitlab.

Я нашел несколько документов для загрузки SSH пользователя в концентратор Git , но не в Gitlab (я полагаю, что в основном похожи ...?). Поэтому я бы использовал это для Git hub

curl -u "USERNAME:PASSWORD" --data "{\"title\": \"TITLE\", \"key\": \"$(cat ~/.ssh/id_rsa.pub)\"}" https://api.github.com/user/keys

, и я бы сделал поля ввода USERNAME, PASSWORD и TITLE для настройки пользователем.

Я хочу сказать, что это будет так же просто для Gitlab (я нашел POST /users/:id/keys на их сайте API , но не знаю, как реализовать это как команду curl), но Я не знаю, насколько тесно связаны Gitlab и Github.

1
задан 2 August 2019 в 01:02

1 ответ

Первой проблемой, которую необходимо решить при использовании REST Gitlab API, является аутентификация, приятно объясненная в документах здесь. Я использую персональный маркер доступа в этом сообщении, какое создание объяснено здесь, но для Вас со сценарием, проходящим проверку подлинности как определенный пользователь Маркер заимствования прав (см. здесь для создания), может лучше подойти.

Для добавления ssh ключа, мне нужно:

POST /user/keys

Отправить данные (и впоследствии использовать метод POST) curl обеспечивает -d опция, обязательные поля title и key. Поскольку заголовок по умолчанию Content-Type: application/x-www-form-urlencoded но API ожидает json Я должен указать то использование -H опция:

$ curl -d '{"title":"test key","key":"'"$(cat ~/.ssh/id_rsa.pub)"'"}' -H 'Content-Type: application/json' https://gitlab.com/api/v4/user/keys?private_token=<my_access_token>
{"id":3889765,"title":"test key","key":"ssh-rsa <my_ssh_key>","created_at":"2019-08-01T21:26:40.952Z"}

Теперь для тестирования изменения я просто перечисляю свои ssh ключи. В документах говорится, что я должен использовать GET /user/keys, как ДОБИРАЮТСЯ, curlметод по умолчанию я просто делаю:

$ curl https://gitlab.com/api/v4/user/keys?private_token=<my_access_token>
[{"id":3889765,"title":"test key","key":"ssh-rsa <my_ssh_key>","created_at":"2019-08-01T21:26:40.952Z"}]

Я сделал это только для тестирования, таким образом, я собираюсь удалить ключ с DELETE /user/keys/:key_id – отметьте это :key_id потребности, которыми заменит идентификатор ключа для удаления:

$ curl -X DELETE https://gitlab.com/api/v4/user/keys/3889765?private_token=<my_access_token>

Вот хорошая статья о curl и общие методы REST.

2
ответ дан 7 December 2019 в 13:15

Другие вопросы по тегам:

Похожие вопросы: