通过curl添加SSH密钥:无法生成指纹

时间:2015-08-14 09:32:06

标签: git bash curl gitlab ssh-keys

我正在编写一个bash脚本,它将SSH-key添加到内部Gitlab服务器。以下是代码:

userToken=$(curl http://gitserver/api/v3/session --data 'login=*****&password=****' | jq '.private_token')
userToken=$(echo "$userToken" | tr -d '"')

# Below key is for testing, will use output of cat ~/.ssh/id_rsa.pub later on
sshKey="ssh-rsa AA*********L ****@***com"

curl --data "private_token=$userToken&title=keyName&key=$sshKey" "http://gitserver/api/v3/user/keys"

但我得到了这样的答复:

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

但是当我通过webbrowser mannualy插入相同的密钥时,一切都工作得很好......

那么我做错了什么?我错过了一个选项吗?

2 个答案:

答案 0 :(得分:1)

看起来您的SSH pubkey中的空格没有被正确转义。有些字符不能在POST DATA字符串中使用,包括空格。

尝试使用curl --data-urlencode代替curl --data自动编码POST数据。

答案 1 :(得分:0)

OP

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

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

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