![如何通过 bash 可执行文件将 SSH 密钥添加到 Gitlab?](https://linux22.com/image/914799/%E5%A6%82%E4%BD%95%E9%80%9A%E8%BF%87%20bash%20%E5%8F%AF%E6%89%A7%E8%A1%8C%E6%96%87%E4%BB%B6%E5%B0%86%20SSH%20%E5%AF%86%E9%92%A5%E6%B7%BB%E5%8A%A0%E5%88%B0%20Gitlab%EF%BC%9F.png)
我正在创建一个 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
我将制作USERNAME
、PASSWORD
和TITLE
输入字段供用户自定义。
我想说的是,对于 Gitlab 来说,这很简单(我POST /users/:id/keys
发现他们的 API 网站,但不知道如何将其实现为curl
命令),但我不知道Gitlab和Github之间的关系有多紧密。
答案1
使用 Gitlab REST 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
,因为 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>