1. Ubuntu 终端里 Codex CLI 报 401,问题到底出在哪
如果你在 Ubuntu 上装好了 Codex CLI,敲下codex却看到一串401 Unauthorized,或者提示local proxy failed、reading choices之类的报错,大概率不是网络断了,而是auth.json里的端点还指向默认地址。Codex CLI 这个工具本身是个终端里的编码助手,能读你当前目录的代码、帮你改文件、跑命令,适合习惯在命令行里干活的人。它默认会去连官方端点,但很多人在 Ubuntu 服务器或本地环境里根本连不通,于是鉴权第一步就卡住了。
我自己在 Ubuntu 22.04 上折腾过好几轮,最开始以为是 Node 版本问题,重装了三次 nvm,后来才发现是~/.codex/auth.json这个文件在作怪。Codex CLI 启动时会读这个文件里的OPENAI_BASE_URL和OPENAI_API_KEY,如果 Base URL 还是默认值,而你的网络环境又访问不了那个地址,就会直接 401。解决办法不是去改系统代理,而是把这个文件里的端点换成 TaoToken 的 API 地址,再配一个可用的 Key。
这里要区分两个概念:Codex CLI 是客户端工具,TaoToken 是提供模型调用的 API 服务。你不需要在 Ubuntu 上装任何额外的东西,只要把 Codex 的鉴权配置指向 TaoToken,终端里就能正常对话和写代码。整个改动其实就一行指令加一个 JSON 片段,后面我会把完整步骤拆开讲。
适合谁看:已经在 Ubuntu 上装了 Codex CLI、但卡在登录或 401 的人;想用终端直接调大模型写代码、不想开浏览器的人;以及之前用默认端点失败、想换一个稳定入口的人。下面从环境确认开始,一步步走到验证成功。
2. 前置准备:Ubuntu 上 Codex CLI 与 TaoToken 的对接条件
在改auth.json之前,先确认两件事:Codex CLI 已经装好,以及你手里有一个 TaoToken 的 API Key。这两样缺一个,后面都会报错。
先说 Codex CLI 的安装。如果你还没装,Ubuntu 上最省事的方式是用 nvm 装 Node 22,再全局装 Codex。命令如下,逐条执行:
sudo apt update sudo apt install -y curl ca-certificates git build-essential curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.4/install.sh | bash source ~/.bashrc nvm install 22 nvm use 22 nvm alias default 22 node -v npm -v npm i -g @openai/codex which codex codex --versionnode -v应该输出 v22 开头的版本号,which codex会显示类似/home/你的用户名/.nvm/versions/node/v22.x.x/bin/codex。如果codex --version能打印版本,说明 CLI 本身没问题。
然后是 TaoToken 的 Key。打开浏览器访问 https://taotoken.net/api-keys ,登录后创建一个新的 API Key,复制出来。这个 Key 通常以sk-开头,只显示一次,记得先存到安全的地方。TaoToken 的 API 基础地址是https://taotoken.net/api,注意这里不带任何查询参数,后面写进 JSON 的就是这个。
注意:API Key 不要直接贴在聊天记录或公开仓库里。Ubuntu 上建议放在
~/.codex/auth.json,并确认文件权限是 600。
确认这两样之后,还要知道 Codex CLI 读配置的路径。在 Ubuntu 上,默认是~/.codex/auth.json。你可以先看看这个文件现在长什么样:
ls -la ~/.codex/ cat ~/.codex/auth.json如果文件不存在,或者里面的OPENAI_BASE_URL是空的、指向默认地址,那就是 401 的根源。接下来我们直接改这个文件。
3. 可复制配置:把 auth.json 改到 TaoToken 的完整片段
这一步是核心。Codex CLI 的鉴权信息全部放在~/.codex/auth.json里,你只需要把里面的 Base URL 和 Key 换成 TaoToken 的即可。先创建目录(如果还没有),再写入 JSON。
mkdir -p ~/.codex cat > ~/.codex/auth.json <<'EOF' { "OPENAI_API_KEY": "sk-你的TaoToken密钥", "OPENAI_BASE_URL": "https://taotoken.net/api" } EOF chmod 600 ~/.codex/auth.json把sk-你的TaoToken密钥替换成你在 https://taotoken.net/api-keys 创建的那串 Key。OPENAI_BASE_URL必须是https://taotoken.net/api,不要多加斜杠或路径。写完后确认一下:
cat ~/.codex/auth.json应该看到两行字段,Key 和 Base URL 都在。这里有个细节:Codex CLI 不同版本对字段名的要求略有差异,有的版本读OPENAI_BASE_URL,有的读base_url。如果你改完还是 401,可以两个都写上,兼容性更好:
{ "OPENAI_API_KEY": "sk-你的TaoToken密钥", "OPENAI_BASE_URL": "https://taotoken.net/api", "base_url": "https://taotoken.net/api" }另外,如果你用的是 Codex 的 TOML 配置方式(部分版本支持~/.codex/config.toml),可以这样写:
model = "gpt-4o" model_provider = "taotoken" [model_providers.taotoken] name = "TaoToken" base_url = "https://taotoken.net/api" env_key = "OPENAI_API_KEY"然后在 shell 里导出 Key:
export OPENAI_API_KEY="sk-你的TaoToken密钥"把这一行加到~/.bashrc末尾,下次开终端自动生效:
echo 'export OPENAI_API_KEY="sk-你的TaoToken密钥"' >> ~/.bashrc source ~/.bashrc三件套对照一下,避免漏项:
| 配置项 | 值 | 写在哪 |
|---|---|---|
| Base URL | https://taotoken.net/api | auth.json 的 OPENAI_BASE_URL |
| API Key | sk-开头的那串 | auth.json 的 OPENAI_API_KEY |
| Model ID | gpt-4o 或你选的模型 | config.toml 的 model 字段 |
Model ID 这块,Codex CLI 默认会用gpt-4o或o4-mini之类,你可以在 TaoToken 的模型列表里挑一个支持的。如果启动时报模型不存在,就把model改成gpt-4o再试。配置写完后,不需要重启系统,直接在当前终端继续下一步验证。
4. 验证请求:执行 codex 命令看鉴权是否通过
配置改完,最直接的验证方式就是在终端里跑一次 Codex。先进入一个你有代码的目录,比如cd ~/projects/demo,然后输入:
codex如果鉴权通过,你会看到 Codex 的交互界面,通常会显示当前模型和可用命令。这时候输入一句简单的话,比如「帮我看看当前目录有哪些文件」,它应该能正常返回结果。如果它开始读目录、给出回答,说明 Base URL 和 Key 都生效了。
也可以直接用非交互模式跑一条指令,验证更快:
codex exec "用一句话解释什么是递归"正常返回类似:
递归是指一个函数在定义中调用自身的编程技巧,通常需要一个终止条件来避免无限循环。看到这种自然语言回复,就说明请求已经打到 TaoToken 的 API 并成功返回了。如果返回的是 JSON 结构,里面会有choices字段,内容也是正常的。
再验证一下模型列表,确认 Key 有权限:
curl https://taotoken.net/api/v1/models \ -H "Authorization: Bearer sk-你的TaoToken密钥"返回的 JSON 里会列出可用模型。如果这一步返回 200 且有模型数组,说明 Key 和端点都没问题。Codex CLI 那边如果还有异常,就回到auth.json检查字段名和拼写。
实测下来,只要auth.json里 Base URL 写对、Key 有效,codex启动后基本不会再有 401。如果第一次没成功,别急着重装,先看下一节的报错对照。
5. 常见报错排查:401、local proxy failed、reading choices 怎么解
改配置的过程中,最容易碰到几类报错,这里逐个对照。
401 Unauthorized:最常见。原因通常是 Key 无效、Base URL 写错、或者auth.json字段名不对。先确认cat ~/.codex/auth.json里的 Key 是完整的sk-开头字符串,没有多余空格。再确认OPENAI_BASE_URL是https://taotoken.net/api,不是https://taotoken.net/api/v1或带斜杠的版本。如果还不行,把base_url字段也加上,兼容不同版本。
local proxy failed:这个报错说明 Codex CLI 尝试走本地代理但失败了。检查你的 shell 里有没有设置HTTP_PROXY或HTTPS_PROXY环境变量,如果有,先取消:
unset HTTP_PROXY unset HTTPS_PROXY然后重新跑codex。TaoToken 的 API 是直连的,不需要额外代理设置。
reading choices 报错:通常是返回体不是预期的 JSON 结构,可能是 Base URL 指向了一个不兼容的端点。确认你用的是https://taotoken.net/api,而不是其他路径。如果用的是 TOML 配置,检查base_url有没有拼错。
OAuth 相关报错:如果你之前用codex login走过 OAuth 流程,可能会残留旧的凭据。直接删掉旧的 auth 文件重新写:
rm -f ~/.codex/auth.json然后按第 3 节的 JSON 片段重新创建。Codex CLI 会优先读这个文件,不会再走 OAuth。
模型不存在:如果报model not found,把config.toml里的model改成gpt-4o,或者在codex启动后用/model命令切换。TaoToken 支持的模型列表可以用第 4 节的 curl 命令查。
排查顺序建议:先cat auth.json看字段,再curl测 Key,最后跑codex exec看返回。三步都过了,基本就稳了。
6. 后续怎么用:终端里长期跑 Codex 的实用建议
配置通了之后,Codex CLI 在 Ubuntu 终端里能干的事不少。你可以把它当成一个随时待命的编码助手:在项目目录里直接codex,让它读代码、改 bug、写测试;也可以用codex exec "..."跑一次性任务,适合脚本里调用。
如果你打算长期在终端里用,建议把 API Key 的环境变量写进~/.bashrc,这样每次开终端都自动带上。另外,~/.codex/auth.json的权限保持 600,别让其他用户读到。
对于需要频繁调用、跑 Agent 任务的场景,可以看看 TaoToken 的 Coding Plan,地址是 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,适合长期编码和自动化流程。如果只是想先试试模型对话效果,可以直接打开 https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 在网页里聊两句,确认模型响应正常再回到终端配置。
接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,里面有不同客户端的配置示例。API Key 管理页面还是 https://taotoken.net/api-keys ,需要新建或轮换 Key 的时候去那里操作。
最后提醒一句:改完auth.json后,如果 Codex 还是读旧配置,检查一下有没有多个配置文件冲突,比如同时存在~/.codex/config.toml和~/.codex/auth.json且字段不一致。以auth.json为准,或者把 TOML 里的 provider 指向同一个 Base URL。终端里跑通一次之后,后面就是日常使用了。