Gemini CLI · VPS OAuth

Gemini CLI 在 VPS 登录报 OAuth Premature close 怎么解决?

浏览器完成授权,不代表 VPS 已拿到 Token。无头环境的失败点可能在设备码、回调、Token 交换或凭据缓存;先证明同一台 VPS 能访问 OAuth 端点,再决定重试登录还是改用 API Key。

更新日期:2026-09-01·作者:island AI Coding 技术团队·主词:Gemini CLI VPS OAuth
错误阶段OAuth Token 交换
常见环境SSH / tmux / 无浏览器 VPS
推荐验证curl + 最小认证路径

1. 把 OAuth 登录拆成四个阶段

阶段失败表现检查重点
生成授权地址CLI 未输出 URL版本与终端模式
浏览器授权页面拒绝或账号受限账号与区域策略
Token 交换Premature closeVPS 出网、代理、CLI HTTP 栈
缓存凭据下次仍要求登录HOME、权限与缓存文件
VPS 上 curl 与 Node fetch 访问 Google OAuth 端点均收到 404 的终端证据
VPS 出网探针记录:同一主机上的 curl 与 Node fetch 均收到 OAuth 端点 404 响应,基础网络可达;CLI 仍需单独排查。

2. 在 VPS 上直接验证 OAuth 端点

下面的探针预期返回 HTTP 响应,即使是 400 也说明 TLS、DNS 和远端可达。不要向探针提交真实授权码。

只验证连通性
curl -I https://oauth2.googleapis.com/
node -e "fetch('https://oauth2.googleapis.com/').then(r=>console.log(r.status)).catch(console.error)"

curl 与原生 Node fetch 都成功,但 CLI 仍在 Token 交换时报 Premature close,更可能是特定 CLI 版本的 HTTP 路径问题。

3. 无浏览器模式仍需要 VPS 完成 Token 交换

NO_BROWSER=true 只改变用户如何打开授权页面,不会把后续 Token 请求移到本地电脑。授权完成后,VPS 仍需访问 OAuth 服务,因此防火墙、IPv6、代理和 TLS 中间层都可能影响结果。

4. 服务器自动化优先使用 API Key

持续运行的服务器任务更适合使用 API Key,而不是依赖交互式 OAuth 刷新。将密钥放入受限的环境变量或 Secret 管理器,限制文件权限并设置预算。

当前会话占位示例
export GEMINI_API_KEY="API_KEY"
gemini --prompt "ping"

5. OAuth 必须保留时的修复顺序

  1. 记录 CLI、Node、Linux 发行版和 shell。
  2. 确认系统时间与 CA 证书正常。
  3. 检查大小写代理变量及 DNS 解析。
  4. 升级当前稳定版后重新执行设备码流程。
  5. 仅在确认版本回归时临时回退,并保留升级检查。
  6. 检查 HOME 与凭据目录是否属于当前 SSH 用户。

6. 不要手工复制长期 OAuth 凭据

避免把 oauth_creds.json 在机器间复制客户端可能重新验证或刷新凭据,文件也包含敏感信息。优先使用受支持的登录流程或面向服务端的 API Key,并在排查后撤销临时凭据。

7. 常见问题

?浏览器显示授权成功,为什么 VPS 仍然失败?

浏览器授权只是前半段。VPS 还需要用授权结果交换 Token,Premature close 往往发生在这条服务器出网链路。

?NO_BROWSER=true 会让本地电脑交换 Token 吗?

不会。它主要改变打开授权页面的方式,后续网络请求仍由运行 Gemini CLI 的 VPS 发起。

?VPS 使用 OAuth 还是 API Key 更合适?

无人值守和自动化任务通常更适合 API Key,并配合 Secret 管理、额度限制与定期轮换。

?curl 成功是否证明 Gemini CLI 一定能登录?

只能证明基础网络可达。CLI 可能使用不同 HTTP 栈,因此还需结合 Node fetch、CLI 版本和日志判断。

* 本文由 island AI Coding 技术团队根据官方文档与公开问题记录原创整理。公开 issue 描述的是特定版本和环境,修复状态可能变化;操作前请记录版本并保留回滚路径。更新时间:2026-09-01。

参考:Gemini CLI 无头 VPS OAuth issue · Gemini CLI 认证文档