我正在尝试通过GitHub的v3 API添加一个ssh密钥,但它似乎没有用。
我正在做的是基于here给出的说明。
更具体地说,我正在使用以下内容:
KEY=$( cat ~/.ssh/id_rsa.pub )
TITLE=${KEY/* }
# the '/* ' above deletes every character in $KEY up to and including the last
# space.
JSON=$( printf '{"title": "%s", "key": "%s"}' "$TITLE" "$KEY" )
TOKEN=$( cat /path/to/tokenfile )
curl -s -d "$JSON" "https://api.github.com/user/keys?access_token=$TOKEN"
当我运行上述内容时,我得到的回应是:
{
"message": "Not Found"
}
...当然,当我签入我的GitHub帐户时,$KEY
不属于列出 1 的ssh键。
我做错了什么?
其他详情
如果我只是运行
,我会得到相同的"message": "Not Found"
响应
curl -s "https://api.github.com/user/keys?access_token=$TOKEN"
如果我将上面的-s
替换为-i
,我确实知道返回的状态为404 Not Found
。然而,
curl -i "https://api.github.com/user/keys"
是401 Unauthorized
。
1 我知道$TOKEN
中的访问令牌很好,因此它不是"message": "Not Found"
响应的原因,因为
curl -s "https://api.github.com/user/repos?access_token=$TOKEN"
返回正确的信息,
curl -s "https://api.github.com/user/repos"
返回
{
"message": "Requires authentication"
}
答案 0 :(得分:3)
您的访问令牌是否具有“用户”范围?相关的excerpt from the docs:
通过API管理公钥要求您通过基本身份验证或具有“用户”范围的OAuth进行身份验证。
如果您的令牌不具有“用户”范围,您将收到404回复,并显示“未找到”消息。
要查看与令牌关联的范围,请使用“授权”API:
curl -u <username> https://api.github.com/authorizations
在下面的示例响应中,第一个授权具有“用户”范围,但第二个授权没有。
enter code here
[
{
"id": 123,
"url": "https://api.github.com/authorizations/123",
"app": {
"name": "Foo",
"url": "https://foo.example.com/",
"client_id": "REDACTED-ID-1"
},
"token": "REDACTED-TOKEN-1",
"note": null,
"note_url": null,
"created_at": "2013-02-18T18:24:00Z",
"updated_at": "2013-05-06T14:17:00Z",
"scopes": [
"repo",
"user"
]
},
{
"id": 456,
"url": "https://api.github.com/authorizations/456",
"app": {
"name": "Bar",
"url": "https://bar.example.com/",
"client_id": "REDACTED-ID-2"
},
"token": "REDACTED-TOKEN-2",
"note": "for stuff",
"note_url": null,
"created_at": "2013-04-16T12:20:00Z",
"updated_at": "2013-05-13T21:28:00Z",
"scopes": [
"public_repo"
]
}
]
如果您确定这是问题的根源,那么您可以通过以下两种方式解决此问题:
"add_scopes": [ "user" ]
答案 1 :(得分:3)
截至2014年2月,“用户”范围不再提供足够的访问权限来管理用户的SSH密钥。范围必须定义为: