跳到主要內容
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. 載入留言中…