Я создаю исполняемый файл 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.
Первой проблемой, которую необходимо решить при использовании 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>