我正在编写一个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插入相同的密钥时,一切都工作得很好......
那么我做错了什么?我错过了一个选项吗?
答案 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"
以防万一将来需要这个......