返回技术分享
GitHub CLI 连接不上 API 的排查记录
这次问题的表面现象很迷惑:浏览器里的 GitHub Device Login 已经显示成功,但命令行里的
gh 仍然报错,无法完成认证。
现象
浏览器页面提示 Congratulations, you're all set.,但终端里出现类似错误:
failed to authenticate via web browser:
Post "https://api.github.com/graphql":
dial tcp 20.205.243.168:443: connectex: A connection attempt failed
关键点是:浏览器授权成功,只说明 GitHub 网页端接受了这次设备授权;它不等于
gh 已经成功访问 API 并把 token 写入本机。
排查顺序
- 先用
gh auth status确认 CLI 是否真的登录成功。 - 再分别测试
github.com和api.github.com,因为网页能打开不代表 API 能连通。 - 检查命令行有没有代理配置:环境变量、Git 代理、WinHTTP 代理。
- 查本地是否有代理端口在监听,公开笔记中用
个人的url代替真实本地代理地址。
gh auth status
curl.exe -I https://github.com
curl.exe -I https://api.github.com
git config --global --get-regexp "^(http|https)\.proxy$"
netsh winhttp show proxy
本次根因
浏览器能打开 GitHub,是因为浏览器有自己的网络通道;但命令行里的 gh 和
curl 没有自动走同一个代理,所以直连 api.github.com:443 超时。
修复方法
在当前 PowerShell 里先给命令行设置临时代理,再刷新 GitHub CLI 登录:
$env:HTTPS_PROXY='个人的url'
$env:HTTP_PROXY='个人的url'
gh auth refresh -h github.com --reset-scopes
gh auth status
如果是第一次登录,可以改用:
gh auth login --hostname github.com --git-protocol https --web
如果最后提示 hosts.yml: Access is denied,说明 GitHub CLI 没有权限写入本机凭据文件,
需要换一个有写入权限的终端重新执行认证。
以后更新网站
认证和远端仓库配置好之后,日常更新只需要改文件、提交、推送:
git status
git add .
git commit -m "Update site notes"
git push
记住这几个判断
- 浏览器成功页不等于
gh登录成功,最终以gh auth status为准。 github.com能访问,不代表api.github.com能访问。- 浏览器会走代理,不代表命令行会自动走代理。
- 遇到 GitHub CLI 网络问题,先查 API 连通性,再查代理。