我正在尝试通过 GitHub 的 v3 API 添加一个 ssh 密钥,但它似乎不起作用。
我正在做的是基于这里给出的说明。
更具体地说,我正在使用以下内容:
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"
Run Code Online (Sandbox Code Playgroud)
当我运行上面的程序时,我得到的响应是:
{
"message": "Not Found"
}
Run Code Online (Sandbox Code Playgroud)
...而且,果然,当我签入我的 GitHub 帐户时,$KEY不在列出的 ssh-keys 1 中。
我究竟做错了什么?
额外细节
"message": "Not Found"如果我只是运行,我会得到相同的响应
curl -s "https://api.github.com/user/keys?access_token=$TOKEN"
Run Code Online (Sandbox Code Playgroud)
如果我-s用-i我看到的替换上面的内容,实际上,返回的状态是404 Not Found. 然而,返回的状态
curl -i "https://api.github.com/user/keys"
Run Code Online (Sandbox Code Playgroud)
是401 Unauthorized。
1我知道访问令牌没问题$TOKEN,因此它不是"message": "Not Found"响应的原因,因为
curl -s "https://api.github.com/user/repos?access_token=$TOKEN"
Run Code Online (Sandbox Code Playgroud)
返回正确的信息,以及
curl -s "https://api.github.com/user/repos"
Run Code Online (Sandbox Code Playgroud)
返回
{
"message": "Requires authentication"
}
Run Code Online (Sandbox Code Playgroud)
您的访问令牌是否具有“用户”范围?文档的相关摘录摘录:
\n\n\n\n\n通过 API 管理公钥要求您通过基本身份验证或具有 \xe2\x80\x98user\xe2\x80\x99 范围的 OAuth 进行身份验证。
\n
如果您的令牌没有用户”范围,您将收到带有“未找到”消息的 404 响应。
\n\n要查看与您的令牌关联的范围,请使用“授权”API:
\n\ncurl -u <username> https://api.github.com/authorizations\nRun Code Online (Sandbox Code Playgroud)\n\n在下面的示例响应中,第一个授权具有“用户”范围,但第二个授权没有。
\n\nenter code here\n[\n {\n "id": 123,\n "url": "https://api.github.com/authorizations/123",\n "app": {\n "name": "Foo",\n "url": "https://foo.example.com/",\n "client_id": "REDACTED-ID-1"\n },\n "token": "REDACTED-TOKEN-1",\n "note": null,\n "note_url": null,\n "created_at": "2013-02-18T18:24:00Z",\n "updated_at": "2013-05-06T14:17:00Z",\n "scopes": [\n "repo",\n "user"\n ]\n },\n {\n "id": 456,\n "url": "https://api.github.com/authorizations/456",\n "app": {\n "name": "Bar",\n "url": "https://bar.example.com/",\n "client_id": "REDACTED-ID-2"\n },\n "token": "REDACTED-TOKEN-2",\n "note": "for stuff",\n "note_url": null,\n "created_at": "2013-04-16T12:20:00Z",\n "updated_at": "2013-05-13T21:28:00Z",\n "scopes": [\n "public_repo"\n ]\n }\n]\nRun Code Online (Sandbox Code Playgroud)\n\n如果您确定这是问题的根源,则可以通过以下两种方法之一解决它:
\n\n\n小智 5
截至 2014 年 2 月,“用户”范围不再提供足够的访问权限来管理用户的 SSH 密钥。范围必须定义为:
| 归档时间: |
|
| 查看次数: |
5203 次 |
| 最近记录: |