我正在创建一个 bash 可执行文件,它创建一个 SSH 密钥,并将其上传到用户的 Gitlab 帐户。我知道如何通过 bash 可执行文件创建 SSH 密钥:
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 的关系有多密切。
使用 Gitlab REST API 时需要解决的第一个问题是身份验证,这里的文档中有很好的解释。我在这篇文章中使用了个人访问令牌,此处解释了创建,但对于使用脚本作为特定用户进行身份验证的您来说,模拟令牌(参见此处的创建)可能更适合。
要添加 ssh 密钥,我需要:
要发送数据(并随后使用 POST 方法)
curl
提供-d
选项,必填字段为title
和key
。由于默认标头是Content-Type: application/x-www-form-urlencoded
,但 API 希望json
我必须使用以下-H
选项指定:现在为了测试更改,我只列出了我的 ssh 密钥。文档说我必须使用
GET /user/keys
,因为 GET 是curl
我刚刚做的默认方法:我这样做只是为了测试,所以我要删除键
DELETE /user/keys/:key_id
- 注意:key_id
需要用要删除的键的 id 替换:这是一篇关于常见 REST 方法的好文章
curl
。