5

我正在尝试通过 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"

当我运行上述内容时,我得到的响应是:

{
  "message": "Not Found"
}

...而且,果然,当我签入我的 GitHub 帐户时,$KEY它不在列出的 ssh-keys 中1

 

 

我究竟做错了什么?

 

 

额外细节

如果我只是跑步,我会得到相同的"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"
}
4

2 回答 2

5

自 2014 年 2 月起,“用户”范围不再提供足够的访问权限来管理用户的 SSH 密钥。范围必须定义为:

  • read:public_key - 提供对用户 SSH 密钥的读取权限
  • write:public_key - 允许应用读取现有密钥并创建新密钥
  • admin:public_key - 允许应用读取、写入和删除密钥
于 2014-07-18T19:59:51.497 回答
4

您的访问令牌是否具有“用户”范围?文档的相关摘录

通过 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"
    ]
  }
]

如果您确定这是问题的根源,则可以通过以下两种方式之一解决:

于 2013-05-21T17:25:27.000 回答