Gitlab API 添加 SSH 密钥

Mat*_*ght 2 ssh openssh gitlab

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

Gitlab 信息: Gitlab 信息

我遇到了这个问题已在此处修复),它与“错误”的 openssh 实现有关。他们在里程碑 7.10 中修复了这个问题。唯一的事情......我的服务器安装了openssh 6.6:

OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.3, OpenSSL 1.0.1f 6 Jan 2014
Run Code Online (Sandbox Code Playgroud)

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

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

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

{
    "message": {
        "fingerprint": ["cannot be generated"]
    }
}
Run Code Online (Sandbox Code Playgroud)

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

- 只是为了记录,这是我用来通过 API 添加 ssh 密钥的脚本

OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.3, OpenSSL 1.0.1f 6 Jan 2014
Run Code Online (Sandbox Code Playgroud)

小智 5

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

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

尝试

curl --data-urlencode "key=$key_pub" --data-urlencode "title=$hostname" \
http://gitlabserver/api/v3/user/keys?private_token=$Token
Run Code Online (Sandbox Code Playgroud)

见:这个


San*_*eep 5

改进 @Mathlight 的答案,以下代码片段将公共 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"
Run Code Online (Sandbox Code Playgroud)