【问题标题】:Adding SSH-key through curl: Fingerprint cannot be generated通过 curl 添加 SSH-key:无法生成指纹
【发布时间】:2015-11-07 12:26:55
【问题描述】:

我正在编写一个 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"
    ]
  }
}

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

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

【问题讨论】:

  • 小问题:curl/GitLab 可以处理帖子字符串中的空格,还是您需要对您的 POST 数据进行 url 编码?您可以尝试使用curl --data-urlencode 而不是curl --data
  • @ErikE.Lorenz 看起来这可能是问题所在并修复!唯一的问题...我从项目中被带走了。但是我把这个信息传递给了负责人(虽然他没有时间尝试)。但是由于这看起来可以解决问题,您可以创建一个官方答案,以便我接受它。

标签: git bash curl gitlab ssh-keys


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    在这里操作

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-10
      • 1970-01-01
      • 2015-11-26
      • 2018-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-20
      相关资源
      最近更新 更多