Gitlab API 添加 SSH-key

Posted

技术标签:

【中文标题】Gitlab API 添加 SSH-key【英文标题】:Gitlab API add SSH-key 【发布时间】:2015-11-26 17:10:37 【问题描述】:

我在通过 API 向我的 gitlab 服务器添加 SSH 密钥时遇到问题(通过网页运行良好)。

Gitlab 信息:

我遇到了与“错误”openssh 实现有关的this issue (which was fixed here)。他们在里程碑 7.10 中修复了这个问题。只有...我的服务器安装了 openssh 6.6:

OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.3, OpenSSL 1.0.1f 6 Jan 2014

现在,我不知道该修复是否向后兼容,但也许值得一提。

此外,日志不会显示任何警告或错误或任何内容。 /tmp/gitlab_key* 文件在服务器上生成:

我面临的问题是 gitlab 无法通过 API 创建指纹。这是我从 API 得到的响应:


    "message": 
        "fingerprint": ["cannot be generated"]
    

所以现在我不知道问题可能是什么。我已经为此苦苦挣扎了将近一个星期,所以我真的希望他的问题能够得到解决。

-仅作记录,这是我用来通过 API 添加 ssh-key 的脚本

#!/bin/bash
 
jsonFile="jsonResponce"
 
echo `curl http://gitserver/api/v3/session --data 'login=****&password=****'` > $jsonFile
userToken=$(jq '.private_token' $jsonFile)
 
finalUserToken=$(echo "$userToken" | tr -d '"')
 
echo "user token: $finalUserToken"
 
# Below key is for testing, will use output of cat ~/.ssh/id_rsa.pub later on
# sshKey="ssh-rsa AAAAB3N***** ****@***.com
 
# curl --data "private_token=$userToken&title=keyName&key=$sshKey" "http://gitserver/api/v3/user/keys"
 
rm $jsonFile

【问题讨论】:

我在这里看不到任何错误或任何问题。你能澄清一下你在问什么吗? @larsks 嗯,对不起。我已经添加了我得到的错误。希望清楚吗?还是您需要更多信息? 【参考方案1】:

id_rsa.pub是base64编码文件,它包含+字符

带有application/x-www-form-urlencoded 的http 帖子,需要对其内容进行编码以防止+ 被转换为 (空格)

试试

curl --data-urlencode "key=$key_pub" --data-urlencode "title=$hostname" \
http://gitlabserver/api/v3/user/keys?private_token=$Token

见:this

【讨论】:

【参考方案2】:

改进@Mathlight 的答案,以下 sn-p 将公共 ssh 密钥上传到 gitlab.com

curl -X POST -F "private_token=$GITLAB_TOKEN" -F "title=$(hostname)" -F "key=$(cat ~/.ssh/id_rsa.pub)" "https://gitlab.com/api/v3/user/keys"

【讨论】:

【参考方案3】:

在这里操作

与此同时,我已将服务器更新到 8.8 版,并稍微更改了 curl 代码,现在它的工作就像一个魅力:

curl -X POST -F "private_token=$userToken" -F "title=$sshName" -F "key=$sshKey" "$gitServer/user/keys"

以防万一将来有人需要这个......

【讨论】:

以上是关于Gitlab API 添加 SSH-key的主要内容,如果未能解决你的问题,请参考以下文章

Gitlab API开发

gitlab批量添加用户的方法

如何添加 GitLab Runner

Gitlab(Docker)中批量添加用户及邮件配置

GitLab API:如何通过 commit_time 获取分支订单

LDAP 到 gitlab 用户同步 oauth 令牌