Gitlab API 添加 SSH 密钥
Gitlab API add SSH-key
我在通过 API 将 SSH 密钥添加到我的 gitlab 服务器时遇到问题(通过网页运行良好)。
Gitlab信息:
我遇到了 this issue (which was fixed here),它与“错误的”openssh 实现有关。他们已在里程碑 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 密钥的脚本
#!/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
id_rsa.pub
为base64编码文件,包含+
个字符
http post 和 application/x-www-form-urlencoded
,需要对其内容进行编码以防止 +
被转换为
(space)
尝试
curl --data-urlencode "key=$key_pub" --data-urlencode "title=$hostname" \
http://gitlabserver/api/v3/user/keys?private_token=$Token
参见:this
OP在这里
与此同时,我已将服务器更新到 8.8 版并稍微更改了 curl
代码,现在它运行得很好:
curl -X POST -F "private_token=${userToken}" -F "title=${sshName}" -F "key=${sshKey}" "${gitServer}/user/keys"
以防万一以后有人需要这个...
改进@Mathlight 的回答,以下代码段将 public 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"
我在通过 API 将 SSH 密钥添加到我的 gitlab 服务器时遇到问题(通过网页运行良好)。
Gitlab信息:
我遇到了 this issue (which was fixed here),它与“错误的”openssh 实现有关。他们已在里程碑 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 密钥的脚本#!/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
id_rsa.pub
为base64编码文件,包含+
个字符
http post 和 application/x-www-form-urlencoded
,需要对其内容进行编码以防止 +
被转换为
(space)
尝试
curl --data-urlencode "key=$key_pub" --data-urlencode "title=$hostname" \
http://gitlabserver/api/v3/user/keys?private_token=$Token
参见:this
OP在这里
与此同时,我已将服务器更新到 8.8 版并稍微更改了 curl
代码,现在它运行得很好:
curl -X POST -F "private_token=${userToken}" -F "title=${sshName}" -F "key=${sshKey}" "${gitServer}/user/keys"
以防万一以后有人需要这个...
改进@Mathlight 的回答,以下代码段将 public 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"