跳到主要内容
Jason Finance
AI 创业

Git 可以 push,Claude Code 却读不到 GitHub Issues:SSH 与 GitHub API 权限的区别

Claude Code GitHub Issues 读不到,但 git push 正常?SSH key 只授权 Git 传输,Issues 和 PR 要另外的 API 认证。用 gh CLI 登录、确认权限、保护 token,并把 Issue 串成 PR 流程。

本文目录
  1. 1.Claude Code GitHub Issues 读不到的原因:SSH 和 API 是两套权限
  2. 2.安装 gh,用运行 Claude Code 的 Linux 用户登录
  3. 2.1安装 GitHub CLI
  4. 2.2用正确的用户执行 gh auth login
  5. 2.3确认登录成功、读得到 Issues
  6. 3.token 存在哪:没有桌面的 Linux 要注意
  7. 4.权限给多少:最小权限的选择
  8. 5.用 –spawn=worktree 时也要确认
  9. 6.从 Issue 到 PR:把任务串起来
  10. 常见问题

我在 2026 年 10 月把 Claude Code 搭在 Oracle 主机上,GitHub 的 SSH key 设置好了,git fetch、git push 都正常。但让 Claude Code 去读一个 GitHub Issue 时,它报告缺少 GitHub API 认证:主机上没有 gh CLI,也没有 GH_TOKEN 或 GITHUB_TOKEN。

先说结论:SSH key 只授权 Git 的传输,要让 Claude Code 读得到 GitHub Issues 和 PR,需要另外的 GitHub API 认证。 最直接的做法是在主机上安装 GitHub CLI(gh),用实际运行 Claude Code 的那个 Linux 用户登录,再用 gh auth status、gh issue list 确认。登录前先想好权限给多大、token 存在哪里。

本文是我 2026 年 10 月在 Ubuntu 24.04 主机上的配置记录。命令中的 project-a、ORG/REPO 都是示例,请换成自己的用户和有权限的 repo。GitHub CLI 的参数和行为以 cli.github.com 官方说明为准(2026 年 10 月 12 日查阅)。

Claude Code GitHub Issues 读不到的原因:SSH 和 API 是两套权限

GitHub 有两套不同的访问方式:

想做的事 用什么验证 典型命令
下载、推送代码 GitHub SSH key(个人 SSH key 或 repo 的 deploy key) git fetch、git push
读写 Issues、PR、CI 状态 GitHub API 认证(GitHub CLI 登录或 token) gh issue view、gh pr list

SSH key 让 Git 能和 GitHub 交换 commit,但 Issues、PR、评论这些数据要走 GitHub 的 API。Claude Code 要读 Issue,通常会用 gh 或带 token 调用 API;两者都没有,它就读不到,即使 git push 一切正常。

安装 gh,用运行 Claude Code 的 Linux 用户登录

安装 GitHub CLI

在管理员账号下安装:

sudo apt update && sudo apt install -y gh
gh --version

安装方式和版本以 GitHub CLI 官方安装说明为准。

用正确的用户执行 gh auth login

登录要在实际运行 Claude Code 的 Linux 用户下进行。如果 Claude Code 跑在 project-a 这个用户下,在管理员账号登录 gh 对它没有用。

sudo -iu project-a

gh auth login --hostname github.com --git-protocol ssh --web --skip-ssh-key
参数 作用
--hostname github.com 登录 github.com
--git-protocol ssh Git 操作使用 SSH。官方说明这个设置会应用到 github.com 下登录的所有账号
--web 用浏览器授权。主机没有桌面时,界面会给出一组一次性代码,在自己的电脑或手机浏览器打开 GitHub 页面输入
--skip-ssh-key 跳过“生成并上传 SSH key”的提示。主机已经有可用的 GitHub SSH key 时加上

(gh auth login 官方说明)

确认登录成功、读得到 Issues

gh auth status
gh issue list --repo ORG/REPO --limit 5
gh issue view 70 --repo ORG/REPO

gh auth status 会显示登录的账号和 token 的存储位置(官方说明)。能列出 Issue,Claude Code 在同一个用户下也就能用 gh 读了。

token 存在哪:没有桌面的 Linux 要注意

GitHub CLI 官方说明,gh 默认把 token 存在系统的凭据存储区;找不到或无法使用凭据存储区时,会改为写进纯文本文件。在没有桌面环境的 Linux 主机上,很可能就是这种情况。

所以要做几件事:

  • 用 gh auth status 确认 token 存在哪里。
  • 保护 ~/.config/gh/ 的文件权限,只让这个 Linux 用户能读。
  • 不同项目、不同信任程度的工作,分给不同的 Linux 用户,避免一个用户的 token 被其他项目读到。
  • 不要为了贴日志执行 gh auth token 或 gh auth status --show-token,输出会直接显示 token。
  • 不要把 ~/.config/gh/、~/.ssh/ 上传到任何公开的地方,也不要放进 repo。

权限给多少:最小权限的选择

gh auth login 用的是你个人 GitHub 账号的授权,范围可能比单个 repo 需要的更广。如果这台主机只需要读写某一个 repo 的 Issues 和 PR,可以考虑更窄的方式:

方式 权限范围 适合
gh auth login(个人账号授权) 视授权范围而定,可能涵盖你能访问的许多 repo 个人项目、自己完全掌控的主机
Fine-grained personal access token 可以只选特定 repo,只开 Issues、Pull requests 等需要的权限 想限制在少数 repo
GitHub App 安装在指定 repo,权限在 App 设置里管控 团队、长期自动化

GitHub CLI 官方说明提到,用 --with-token 传入 fine-grained token 可能出现令人困惑的行为,建议改用 GH_TOKEN 环境变量。不管用哪种方式,token 都不要写进 repo、CLAUDE.md、systemd 的 unit 文件、文章或截图里,也不要贴到对话里请别人帮忙看。

用 –spawn=worktree 时也要确认

如果 Claude Code Remote Control 用 --spawn=worktree 模式,每个新 session 会在自己的 Git worktree 里工作。worktree 换了目录,但运行的 Linux 用户没变,所以 gh 的登录状态一样适用。开工前还是值得确认:

  • 这个 session 跑在预期的 Linux 用户下。
  • gh 在 PATH 里(用 systemd 启动时,PATH 由 unit 文件设置)。
  • 这个用户的授权读得到目标 repo。

多个 Remote Control 和 worktree 怎么分工,见《一台主机运行多个 Claude Code Remote Control》。

从 Issue 到 PR:把任务串起来

gh 能用之后,GitHub Issues 就可以当成给 Claude Code 的任务清单:在 Issue 里写清楚要做什么,Claude Code 读 Issue、在分支上修改、开 PR,你在 PR 上审。

# 只读取,不改动 Issue
gh issue list --repo ORG/REPO --state open --limit 20
gh issue view 70 --repo ORG/REPO --comments

# 看 PR 和 CI 状态
gh pr list --repo ORG/REPO
gh pr checks 123 --repo ORG/REPO

几个要注意的地方:

  • commit 到 feature 分支不等于已经上线,要确认 PR 合并、CI 通过、部署完成。
  • 开 PR 前确认当前分支、base 分支和 diff,--spawn=worktree 的 session 可能不在你以为的分支上。
  • 读 Issue 和改 Issue 是不同的权限。只需要读,就只给读。

整套主机和 Remote Control 的配置,见《Oracle Cloud 搭建 Claude Code Remote Control 常驻教程》;网站整体怎么用 GitHub 管理文章和部署,见《Jason Finance 从零到一》。

常见问题

为什么 git push 可以,Claude Code 却读不到 GitHub Issues?

因为两者是不同的权限机制。SSH key 只授权 Git 的传输,例如 git fetch 和 git push;Issues 和 PR 要通过 GitHub API 读取,需要 GitHub CLI 登录或 API token。SSH key 设置好了,不代表 API 也能用。

怎么让 Claude Code 读得到 GitHub Issues?

在主机上安装 gh,切换到实际运行 Claude Code 的 Linux 用户,执行 gh auth login --hostname github.com --git-protocol ssh --web --skip-ssh-key 完成授权,再用 gh auth status 和 gh issue list 确认。

gh auth login 的 --skip-ssh-key 是做什么的?

用 SSH 作为 Git 协议时,gh 会检测密钥并询问是否生成、上传新的 SSH key。主机已经有可用的 GitHub SSH key 时,加上 --skip-ssh-key 就会跳过这一步。

gh 的 token 存在哪里?安全吗?

gh 默认存在系统的凭据存储区;找不到或无法使用时,会改存成纯文本文件。在没有桌面环境的 Linux 主机上要特别注意文件权限,gh auth status 会显示 token 存在哪里。

用个人账号登录 gh 权限会不会太大?

可能会。gh auth login 的个人授权范围可能比单个 repo 需要的更广。要做到最小权限,可以评估只开放特定 repo 与 Issues、PR 权限的 fine-grained token 或 GitHub App。

可以把 GitHub token 写进 CLAUDE.md 或 systemd 配置吗?

不要。token 不应出现在 repo、CLAUDE.md、systemd unit 文件、shell 历史记录、日志或公开截图里;也不要为了贴日志执行 gh auth token 或 gh auth status --show-token。

延伸阅读

关于作者

Jason 的照片

Jason

Google 大客户销售客户经理、哥伦比亚大学 MBA 录取者,分享自己实际用过的理财工具与经验。

留言

使用 Google 登录即可留言。留言“不会”使用您的 Google 头像或姓名,对外显示的昵称是系统随机生成的代号,以保护您的隐私。

登录即表示你同意本站的隐私政策。

  1. 加载留言中…