约 8 分钟阅读

GitHub 仓库明明存在,为什么 AI Agent 却说找不到?

AIGitHub动手
系列专栏AI第 3 / 4 篇

你在 GitHub 网页里明明看得到一个私有仓库,复制地址交给 AI Agent,它却回来告诉你:

ERROR: Repository not found.

仓库没有消失,地址也未必写错。更常见的原因是:你的浏览器认识你,但这台电脑上的命令行还不认识你。

配置前后对比:授权前无法拉取私有仓库,授权后可以正常克隆

这篇文章要做的事很简单:给电脑发一张 GitHub 的“工作证”。配好以后,命令行和运行在本机的 AI Agent 就能在你授权的范围内拉取私有仓库、提交代码、推送改动和创建 PR。

整个过程大约 5 分钟。绝大多数操作可以交给 Agent,你只需要亲手完成一次浏览器授权。

先搞懂:这不是“登录网页”,而是“授权工具”

浏览器登录 GitHub,解决的是“你能不能看网页”。

命令行授权解决的是另一件事:

允许这台电脑上的 Git 和 GitHub CLI,在指定权限范围内代表你操作 GitHub。

可以把它想成一张工作证:

  • GitHub CLI 保存授权凭据,用来调用 GitHub API;
  • SSH 密钥证明“正在连接的是这台已授权的电脑”;
  • SSH 配置告诉系统,访问 github.com 时应该出示哪一把密钥。

AI Agent 并没有凭空获得你的账号。它只是运行在你的电脑上,使用你已经配置好的 Git 和 GitHub CLI。Agent 能做什么,取决于你给本机工具开放了什么权限。

你到底授予了哪些权限

GitHub CLI 当前的网页登录流程会使用一组基础权限,通常包括:

权限通俗理解用途
repo仓库读写读取私有仓库、推送改动、创建 PR
read:org读取组织信息判断你是否有团队或公司仓库的访问资格
gistGist 读写GitHub CLI 的基础授权范围之一
admin:public_key管理账号公钥在登录过程中把这台电脑的新 SSH 公钥上传到 GitHub 时使用

SSH 私钥则保存在你的电脑上。拿到私钥的人,可能以你的身份访问你有权限的仓库,所以有三条底线:

  1. 私钥内容不打印、不发进聊天、不传到网盘;
  2. 不覆盖电脑上已经存在的密钥;
  3. 不把访问令牌写进普通文本文件,优先交给系统钥匙串或凭据管理器保存。

这些权限不是永久卖身契。你随时可以在 GitHub 的 Settings → Applications 撤销 GitHub CLI 授权,也可以在 Settings → SSH and GPG keys 删除这台电脑的公钥。

最省事的做法:把这段话交给你的 Agent

不用自己逐条敲命令。把下面这段提示词复制给本机上的 Claude Code、Codex、Cursor 或其他能操作终端的 Agent:

帮我把这台电脑绑定到我的 GitHub 账号,让命令行和你都能代表我操作 GitHub 仓库。

我的目标:
- 能拉取我账号有权限访问的私有仓库
- 能推送改动、创建 PR
- 让你之后可以直接操作这些仓库

请只按下面的顺序执行,并逐步告诉我结果:
1. 先只读检查现状:操作系统、gh CLI 是否安装、当前登录账号、
   ~/.ssh 下已有密钥、git user.name 和 user.email。先报告,不要直接修改。
2. 如果缺少 gh CLI,按当前系统安装稳定版。
3. 新建一把 GitHub 专用的 ed25519 SSH 密钥,使用独立文件名,
   绝对不要覆盖或删除已有密钥。
4. 配置 SSH:连接 github.com 时使用这把密钥,并设置 IdentitiesOnly yes。
   保留 ~/.ssh/config 里已有的其他配置。
5. 使用 GitHub CLI 的 SSH + 浏览器授权流程登录:
   gh auth login --hostname github.com --git-protocol ssh --web
   需要我在浏览器操作时停下来,告诉我该复制什么、点击什么、会授予哪些权限。
6. 配置 git 提交署名;邮箱使用 GitHub 的 users.noreply 隐私地址。
7. 验证 gh auth status、ssh -T git@github.com,最后实际克隆一个我指定的私有仓库。
8. 汇总改了哪些文件(给绝对路径)、没改哪些,以及完整撤销方法。

安全要求:
- 不打印、复制或记录私钥内容和访问令牌。
- 令牌只保存到系统钥匙串或凭据管理器,不写入普通文件。
- 不修改或删除现有密钥与无关 SSH 配置。
- 不执行 git push,除非我另行明确授权。

把目标和安全边界告诉 Agent,由它检查现状并完成本机配置

这段提示词里最重要的不是某条命令,而是三个边界:先检查再改、绝不覆盖旧密钥、真正推送前另行确认。

唯一需要你亲手做的一步

Agent 能安装工具、生成密钥、写 SSH 配置,但浏览器授权必须由你本人点击。GitHub 需要确认:真的是账号所有者在把权限交给这台电脑。

终端会给出一串一次性设备码,并打开 GitHub 授权页面。你需要:

  1. 确认正在授权的是正确的 GitHub 账号;
  2. 核对页面列出的权限范围;
  3. 粘贴设备码并点击 Authorize;
  4. 如果 GitHub CLI 询问上传哪把公钥,选择 Agent 刚创建的那把 .pub 公钥。

浏览器设备码授权是整个流程中唯一必须本人确认的一步

看到终端出现 Logged in as 你的用户名,只代表授权流程结束,还不代表私有仓库一定能正常使用。最后还要验收。

三层验收:别把“配置完成”当成“真的能用”

依次检查三件事:

gh auth status
ssh -T git@github.com
git clone git@github.com:你的账号/你的私有仓库.git

它们分别回答:

  1. 账号登录了吗? gh auth status 应显示正确账号和授权状态;
  2. SSH 密钥认得吗? ssh -T 应出现 You've successfully authenticated;
  3. 代码真的拿得到吗? 实际克隆私有仓库,并确认目录里有真实项目文件。

用账号状态、SSH 认证和真实克隆三层验证配置结果

这里有一个很容易误判的提示:

Hi USERNAME! You've successfully authenticated,
but GitHub does not provide shell access.

后半句不是报错。GitHub 只是在说它不提供远程 shell;真正关键的是前半句 successfully authenticated。GitHub 官方文档也说明,这条测试命令可能以状态码 1 退出,所以应当看返回消息是否包含你的用户名,而不是只盯着退出码。

第三步才是最终验收。前两项只能证明“GitHub 认识这台电脑”,实际克隆成功才能证明“这台电脑确实拿得到目标仓库”。

出问题时,先看这四类现象

现象常见原因处理方向
Repository not found登录了错误账号,或账号没有该私有仓库权限运行 gh auth status,多账号时检查当前活动账号
Permission denied (publickey)SSH 没使用预期密钥,或公钥没上传成功检查 ~/.ssh/config 的 IdentityFile
Too many authentication failures本机密钥太多,被服务器逐个尝试后拒绝为 GitHub 主机配置 IdentitiesOnly yes
HTTPS 地址一直询问用户名当前仓库仍在使用 HTTPS 远端改用 SSH 地址,或运行 gh auth setup-git 配置 HTTPS 凭据

不用了,怎么收回权限

撤销要分两层:

  • 在本机运行 gh auth logout,移除 GitHub CLI 登录;
  • 到 GitHub 网页删除这台电脑的 SSH 公钥,并撤销 GitHub CLI 应用授权。

如果还要清理本地文件,再删除这次新建的专用密钥,并移除 ~/.ssh/config 中对应的 GitHub 配置块。只删这次新增的内容,不要用模糊通配符清理整个 ~/.ssh。

最后:Agent 真正缺的,往往不是能力,而是通行证

很多时候,AI Agent 说“仓库找不到”,并不是它不会用 Git,也不是项目真的消失了。它只是站在门外,没有一张能证明身份的工作证。

授权配好之后,你就可以直接对它说:

把我 GitHub 上的某个仓库克隆下来,先读 README,告诉我这个项目做什么、怎么运行。不要修改文件。

它会自己取代码、读项目、继续工作。

这也是今天使用 AI Agent 的一个重要分界:不只是问它问题,而是把清晰的目标、足够的工具和可控的权限交给它,让它真正把事情做完。

延伸阅读:GitHub CLI 登录说明 · GitHub 官方 SSH 测试指南

分享与订阅

如果这篇文章对你有帮助,欢迎分享给朋友。

读者交流

评论

按需加载评论,不影响正文阅读。

← 返回文章列表