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

Adding SSH-key through curl: Fingerprint cannot be generated

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

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"
    ]
  }
}

但是当我通过网络浏览器手动插入相同的密钥时,一切正常...

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

您的 SSH 公钥中的空格似乎没有正确转义。 POST DATA 字符串中不能使用某些字符,包括空格。

尝试使用 curl --data-urlencode 而不是 curl --data 来自动编码 POST 数据。

OP在这里

与此同时,我已将服务器更新到 8.8 版并稍微更改了 curl 代码,现在它运行得很好:

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

以防万一以后有人需要这个...