通过 curl 添加 SSH-key:无法生成指纹

Posted

技术标签:

【中文标题】通过 curl 添加 SSH-key:无法生成指纹【英文标题】:Adding SSH-key through curl: Fingerprint cannot be generated 【发布时间】: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 看起来这可能是问题所在并修复!唯一的问题...我从项目中被带走了。但是我把这个信息传递给了负责人(虽然他没有时间尝试)。但是由于这看起来可以解决问题,您可以创建一个官方答案,以便我接受它。 jxqc.wordpress.com/2014/09/01/… 【参考方案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"

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

【讨论】:

以上是关于通过 curl 添加 SSH-key:无法生成指纹的主要内容,如果未能解决你的问题,请参考以下文章

如何为我的新 gitlab 帐户生成新的 ssh-key?

TortiseGit 添加SSH-Key

服务器添加新用户用ssh-key 登录,并禁用root用户 密码登录

Gitlab API 添加 SSH-key

git添加ssh-key后免登陆未生效

ssh-key 与 git账户配置以及多账户配置