如何通过 bash 可执行文件将 SSH 密钥添加到 Gitlab?

如何通过 bash 可执行文件将 SSH 密钥添加到 Gitlab?

我正在创建一个 bash 可执行文件,它将创建一个 SSH 密钥并将其上传到用户的 Gitlab 帐户。我知道如何通过 bash 可执行文件创建 SSH 密钥:

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

并且我也知道如何从中检索,但是我不知道如何将其上传到用户的 Gitlab 帐户。

我找到了多个关于将用户的 SSH 上传到 Git 的文档中心但不是 Gitlab(我认为大部分都类似...?)。所以我会将它用于 Git中心

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

我将制作USERNAMEPASSWORDTITLE输入字段供用户自定义。

我想说的是,对于 Gitlab 来说,这很简单(我POST /users/:id/keys发现他们的 API 网站,但不知道如何将其实现为curl命令),但我不知道Gitlab和Github之间的关系有多紧密。

答案1

使用 Gitlab REST API 时需要解决的第一个问题是身份验证,在文档在这里。我在这篇文章中使用了个人访问令牌,其创建过程已解释这里,但对于使用脚本验证特定用户身份的模拟令牌(看这里为创作)可能更适合。

添加 ssh 密钥我需要:

POST /user/keys

要发送数据(随后使用 POST 方法),curl请提供-d选项,必填字段为titlekey。由于默认标头是,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,因为 GET 是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需要用要删除的键的 id 替换:

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

以下是curl一篇关于常见 REST 方法的精彩文章

相关内容