认证故障排查
按凭据来源、令牌权限、账号、组织策略和系统钥匙串定位登录失败。
先确定失败发生在浏览器授权、CLI 获取令牌,还是调用 Copilot 服务时。浏览器已显示成功,并不保证 CLI 正在使用刚保存的账号:令牌环境变量可能具有更高优先级。
按错误定位
| 现象 | 优先检查 | 处理方向 |
|---|---|---|
| No authentication information found | 是否存在 CLI 登录、环境变量或 gh 登录 | 运行 copilot login,或正确提供自动化凭据 |
| 401 Unauthorized | 令牌过期、撤销、权限不足 | 检查令牌状态和 Copilot Requests 权限,必要时重新生成 |
| Classic PAT 被拒绝 | 是否使用 ghp_ 令牌 | 换 fine-grained PAT 或 OAuth |
| 403 / policy denied | 订阅及组织、企业 CLI 策略 | 核对账号授权并联系管理员处理策略 |
| Keychain unavailable | 系统凭据库是否可用 | 恢复凭据库访问,或选择适合环境的令牌机制 |
| 登录了错误账号 | 环境变量覆盖、多账号选择 | 核对优先级,再使用 /user switch |
没有找到凭据
先用 gh auth status 查看 GitHub CLI 状态;这检查的是 gh,不是对 Copilot CLI 所有凭据来源的完整诊断。没有登录时,可以使用 copilot login,也可用 gh auth login 建立回退凭据。
接着确认 COPILOT_GITHUB_TOKEN、GH_TOKEN、GITHUB_TOKEN 是否设置以及来自哪里。检查变量是否存在即可,不要把令牌正文粘贴进问题报告。优先级和 Codespaces 例外见认证与配置。
macOS 可以检查服务对应的凭据条目:
security find-generic-password -s copilot-cli找不到条目时重新登录;已有条目但确认它失效时,可删除该条目后重新登录:
security delete-generic-password -s copilot-cli
copilot login删除会清除本地对应凭据,不是普通的只读诊断步骤。
令牌和权限错误
Fine-grained PAT 必须属于个人账号,并在 Account 权限中包含 Copilot Requests。组织拥有的 PAT、过期令牌或缺少权限的令牌,不能通过重复登录提示解决。
Classic PAT 在交互模式会被忽略并显示警告,用户还可通过 /login 选择其他认证方式。在 copilot -p 等非交互模式中,如果它是唯一凭据,CLI 会拒绝启动。不要把这两种行为混为“总是自动回退成功”。
浏览器流程无法返回终端
远程或无头环境可显式运行 copilot login --device-code。设备码流程不要求浏览器访问远程终端上的 loopback 回调。授权组织启用了 SAML SSO 时,还需要完成组织授权。
系统钥匙串不可用
macOS 检查登录钥匙串能否解锁;Windows 检查 Credential Manager 和 Windows Vault 是否可访问。Linux 检查 libsecret 及桌面 keyring 服务:
command -v secret-tool官方给出的 Debian / Ubuntu 安装示例是 sudo apt install libsecret-1-0 gnome-keyring seahorse。这是平台相关的依赖示例,不适用于所有 Linux 发行版。无头环境如果不能提供钥匙串,可使用受支持的环境变量令牌;接受 CLI 提示的明文存储前应了解其保存位置。
策略或账号问题
403 和 policy denied 可能表示没有可用 Copilot 许可,也可能是管理员关闭了 CLI。重新生成令牌不会改变组织策略。先用 /user 核对账号,再核对该账号的许可和管理设置;有多个账号时使用 /user list 和 /user switch。