服务器 Codex Device Code 切换账户登录说明
本文记录在服务器环境中使用 codex-proxy login --device-auth 退出旧账户并登录新账户的流程。
这篇文章和《服务器 Codex 反向代理使用说明》是同一套使用场景:服务器本身无法直接访问 OpenAI,需要先通过本地 Windows 电脑的 v2rayN、Clash、Clash Verge 等代理建立 SSH 反向隧道,再让服务器上的 Codex 通过 codex-proxy 访问外网。
适用场景:
- 服务器已经安装
codex和codex-proxy。 - 本地电脑已经建立 SSH 反向代理。
- 需要从旧 ChatGPT/Codex 账户切换到新账户。
- 服务器没有浏览器,需要使用 device code 在本地浏览器完成登录。
1. 前提条件
开始前,建议先确认上一篇文章中的反向代理链路已经可用。
本地 Windows PowerShell 中需要保持 SSH 反向隧道窗口打开:
1 | ssh -N -T -o ExitOnForwardFailure=yes -R 43897:127.0.0.1:7897 your_user@your_server_ip |
其中:
43897:服务器端监听端口;7897:本地代理端口,例如 v2rayN、Clash、Clash Verge 等;your_user:服务器用户名;your_server_ip:服务器 IP 地址。
注意:这个 PowerShell 窗口需要一直保持打开,关闭后服务器上的反向代理会断开。
2. 检查当前 Codex 状态
登录服务器后,先检查当前用户、Codex 命令位置和认证文件:
1 | whoami |
如果需要查看 auth.json 的基本结构,但不暴露 token,可以执行:
1 | python3 - <<'PY' |
3. 退出当前 Codex 账户
优先使用官方退出命令:
1 | codex-proxy logout |
然后检查认证文件是否仍然存在:
1 | ls -l ~/.codex/auth.json 2>/dev/null || echo "auth.json removed" |
如果退出后仍然存在认证问题,可以手动备份并删除 auth.json:
1 | mkdir -p ~/.codex_auth_backup |
4. 清理旧的 Codex 后台进程
如果之前启动过 codex app-server,建议在重新登录前清理旧进程。
先查看当前用户下的 Codex 相关进程:
1 | ps -u "$(whoami)" -o pid=,cmd= | grep '[c]odex' || echo "no codex process" |
如果存在旧的 app-server 进程,可以只清理当前用户下的相关进程:
1 | ps -u "$(whoami)" -o pid=,cmd= \ |
不要在多用户服务器上直接使用不带用户限制的 pkill -f codex,否则可能误匹配其他用户的 Codex 进程。
再次检查是否还有残留进程:
1 | ps -u "$(whoami)" -o pid=,cmd= | grep '[c]odex' || echo "no codex process" |
5. 检查反向代理是否可用
在服务器上测试 OpenAI 是否能通过反向代理访问:
1 | curl -I -x http://127.0.0.1:43897 https://api.openai.com |
如果能看到 HTTP 响应,说明反向代理可用。
如果连接失败,先回到本地 Windows PowerShell,确认 SSH 反向隧道仍然打开:
1 | ssh -N -T -o ExitOnForwardFailure=yes -R 43897:127.0.0.1:7897 your_user@your_server_ip |
也可以在本地电脑测试本地代理端口:
1 | curl.exe -I -x http://127.0.0.1:7897 https://www.google.com |
6. 使用 Device Code 登录新账户
在服务器上执行:
1 | codex-proxy login --device-auth |
终端一般会输出:
- 一个登录链接;
- 一个一次性 device code。
操作步骤:
- 在本地浏览器中打开终端显示的登录链接。
- 登录你要切换到的新 ChatGPT/Codex 账户。
- 输入服务器终端显示的 device code。
- 等待服务器终端显示登录成功。
建议使用浏览器无痕窗口,避免浏览器自动复用旧账户。
7. 检查新账户登录状态
登录完成后,在服务器上执行:
1 | ls -l ~/.codex/auth.json |
继续检查认证文件结构:
1 | python3 - <<'PY' |
如果 auth.json 存在,并且能正常读取,说明新的本地认证文件已经生成。
8. 启动 Codex
进入你的项目目录:
1 | cd /path/to/your/project |
通过代理启动 Codex:
1 | codex-proxy |
不要直接执行:
1 | codex |
因为直接运行 codex 可能不会带上你在 codex-proxy 中配置的代理环境变量。
9. 一键完整流程
如果只是想快速完成“退出旧账户并登录新账户”,可以直接执行下面的完整命令:
1 | echo "== current ==" |
10. 常见问题
10.1 codex-proxy login --device-auth 无法打开登录页面
可能原因:
- 服务器代理不可用。
- SSH 反向隧道未启动。
- 本地代理端口不正确。
- 本地代理软件未开启 HTTP 代理端口。
检查命令:
1 | curl -I -x http://127.0.0.1:43897 https://api.openai.com |
如果该命令失败,优先修复代理。
10.2 登录后仍然是旧账户
可能原因:
- 旧的
auth.json未删除。 - 旧的
codex app-server进程仍在运行。 - 登录时浏览器自动使用了旧账户。
处理方法:
1 | codex-proxy logout || true |
登录时建议使用浏览器无痕窗口,确保登录的是新账户。
10.3 auth.json 不存在
可能原因:
- device-code 登录没有完成。
- 登录过程中网络中断。
- 没有使用
codex-proxy login --device-auth。 - 登录成功后文件写入失败。
重新登录:
1 | codex-proxy login --device-auth |
10.4 启动 Codex 后网络错误
确认不是直接运行了 codex:
1 | codex-proxy |
同时确认代理可用:
1 | curl -I -x http://127.0.0.1:43897 https://api.openai.com |
如果 codex-proxy 仍然无法访问网络,可以回到《服务器 Codex 反向代理使用说明》中重新检查 SSH 反向隧道、代理端口和 codex-proxy 包装脚本。
11. 日常使用流程
第一步:本地电脑打开 SSH 反向隧道
1 | ssh -N -T -o ExitOnForwardFailure=yes -R 43897:127.0.0.1:7897 your_user@your_server_ip |
保持该窗口不关闭。
第二步:登录服务器并进入项目目录
1 | ssh your_user@your_server_ip |
1 | cd /path/to/your/project |
第三步:启动 Codex
1 | codex-proxy |
第四步:需要换号时重新登录
1 | codex-proxy logout |
12. 最小命令汇总
本地电脑
1 | ssh -N -T -o ExitOnForwardFailure=yes -R 43897:127.0.0.1:7897 your_user@your_server_ip |
服务器测试代理
1 | curl -I -x http://127.0.0.1:43897 https://api.openai.com |
服务器切换账户
1 | codex-proxy logout || true |
服务器启动 Codex
1 | codex-proxy |