【Bug已解决】Windows Codex Desktop 连接 Windows OpenSSH 远程项目:把 auth.json 改到 TaoToken 的完整配置

发布时间:2026/9/29 9:54:39
【Bug已解决】Windows Codex Desktop 连接 Windows OpenSSH 远程项目:把 auth.json 改到 TaoToken 的完整配置 1. Windows Codex Desktop 连远程项目为什么总在 auth.json 上翻车Codex Desktop 在 Windows 上跑起来之后很多人第一反应是把它当成一个纯本地编辑器用。直到项目放在另一台 Windows 机器的 OpenSSH 目录里才会发现「连得上」和「能打开项目」完全是两码事。我自己第一次配的时候SSH 窗口里ssh userhost明明秒进Codex Desktop 里填同样的userhost却弹Permission denied (publickey)换密码登录又卡在Connection timed out。折腾半天才定位到问题不在 SSH 服务端而在 Codex Desktop 读取认证信息的位置——它默认去翻本机用户目录下的auth.json而这个文件里的 Base URL 和 Key 如果没指向你实际要用的服务端点远程项目加载就会在鉴权阶段被拦下来。先把场景说清楚。你有一台 Windows 机器 A装了 Codex Desktop另一台 Windows 机器 B开了 OpenSSH Server项目代码放在C:\projects\foo。你想在 A 的 Codex Desktop 里直接打开 B 上的项目编辑保存都走 SSH 通道。这个链路里其实有两层认证第一层是 SSH 本身的公钥/密码认证第二层是 Codex Desktop 调用模型服务时的 API 鉴权。很多人只调通了第一层第二层用的还是默认配置或者一个失效的 Key于是表现就是「SSH 能连项目打不开」。auth.json在这个流程里扮演的是「模型服务凭据载体」的角色。Codex Desktop 启动时会去固定路径读它拿到 Base URL 和 API Key 之后才去发请求。如果你的auth.json里写的还是官方默认地址或者 Key 已经过期那么即便 SSH 隧道建好了Codex Desktop 在拉取远程项目元数据、做代码索引的时候依然会 401。这就是为什么标题里强调「把 auth.json 改到 TaoToken」——不是让你改 SSH 配置而是把模型服务这一层的出口统一到一个可用的端点上。还有一个容易被忽略的点Windows OpenSSH 的路径风格。机器 B 上的项目在C:\projects\foo但 Codex Desktop 内部如果按 POSIX 习惯去拼/home/user/projects远程列目录直接报错。这个和auth.json是两件独立的事但经常同时出现导致你以为「连不上」其实是「连上了但路径解析错了」。所以这篇会先把auth.json和 Base URL 配好再处理 SSH 连通性和路径映射最后给一套验证请求的方法确保你每一步都能看到明确结果。适合谁看在 Windows 上用 Codex Desktop、需要通过 SSH 打开另一台 Windows OpenSSH 主机上项目的开发者以及已经能 SSH 登录但 Codex Desktop 里项目加载失败、报 401 或路径错误的人。下面从 TaoToken 的前置准备开始一步步给可复制的配置。2. TaoToken 前置准备Base URL、API Key 与 auth.json 路径确认在动auth.json之前先把 TaoToken 这边的三样东西拿到手Base URL、API Key、以及确认 Codex Desktop 在 Windows 上到底读哪个路径的auth.json。这三样缺一个后面都会卡住。Base URL 用https://taotoken.net/api注意这个地址不带任何查询参数直接作为 API 根路径填进配置。API Key 需要你去控制台生成入口在 API Keys 页面。生成的时候建议单独建一个给 Codex Desktop 用的 Key方便后面轮换和排查——如果所有工具共用一个 Key某个工具出问题你很难判断是 Key 本身失效还是配置写错。关于auth.json的路径Windows 上 Codex Desktop 通常读的是用户目录下的配置文件夹。常见位置是C:\Users\你的用户名\.codex\auth.json但不同版本可能落在%APPDATA%下的对应目录。最稳妥的办法是先在 Codex Desktop 里触发一次请求然后去这几个候选路径找最近被修改的auth.json。如果你不确定可以直接在 PowerShell 里搜Get-ChildItem -Path $env:USERPROFILE, $env:APPDATA -Recurse -Filter auth.json -ErrorAction SilentlyContinue | Select-Object FullName, LastWriteTime这条命令会列出用户目录和 AppData 下所有auth.json及其修改时间最近被写过的那个基本就是 Codex Desktop 在用的。找到之后先备份一份改坏了能回滚Copy-Item C:\Users\你的用户名\.codex\auth.json C:\Users\你的用户名\.codex\auth.json.bak接下来是 SSH 侧的前置。机器 B 上要确认 OpenSSH Server 已经安装并启动。在 B 上以管理员身份开 PowerShellGet-WindowsCapability -Online | Where-Object Name -like OpenSSH.Server* Start-Service sshd Set-Service -Name sshd -StartupType Automatic如果第一条命令显示State : NotPresent先装Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0然后在机器 A 上生成密钥对如果还没有ssh-keygen -t ed25519 -C codex-desktop公钥默认在C:\Users\你的用户名\.ssh\id_ed25519.pub。把它的内容追加到机器 B 的C:\Users\B的用户名\.ssh\authorized_keys。注意 Windows OpenSSH 对authorized_keys的权限有要求如果权限过宽会拒绝使用。在 B 上执行icacls C:\Users\B的用户名\.ssh\authorized_keys /inheritance:r /grant B的用户名:F /grant SYSTEM:F这一步做完SSH 这一层才算真正准备好。TaoToken 的 Key 和 Base URL 是模型服务层SSH 密钥是传输层两层都通了Codex Desktop 才有机会把远程项目完整拉起来。下面进入auth.json的具体配置。3. 可复制配置auth.json 与 Base URL 完整片段这一节给的是可以直接粘贴的配置。先看auth.json的结构。Codex Desktop 读的这个文件本质是一个 JSON里面至少要有 API Key 和 Base URL 两个字段。不同版本字段名可能略有差异常见的是api_key和base_url也有用OPENAI_API_KEY风格的。下面这份是通用写法你按自己版本的实际字段名对齐{ api_key: sk-你的TaoToken密钥, base_url: https://taotoken.net/api, model: claude-sonnet-4-20250514 }把sk-你的TaoToken密钥换成你在控制台生成的那串base_url保持https://taotoken.net/api不变。model字段填你要用的模型 ID这个 ID 要和 TaoToken 支持的模型列表一致写错了会在请求阶段报模型不存在。保存时注意编码用 UTF-8不要带 BOMWindows 记事本另存为的时候选「UTF-8」而不是「UTF-8 with BOM」否则某些解析器会把 BOM 当成 JSON 内容的一部分直接报解析失败。如果你用的是带settings层级的版本配置可能长这样{ settings: { api_key: sk-你的TaoToken密钥, base_url: https://taotoken.net/api, model: claude-sonnet-4-20250514, timeout: 60 } }两种结构不要混用。判断方法很简单打开你备份出来的原始auth.json看 Key 是在顶层还是在settings下面照着原结构改只替换值不新增层级。这是最容易踩的坑——结构改错Codex Desktop 启动时读不到字段表现就是「配置明明写了却像没生效」。除了auth.jsonCodex Desktop 有些版本还会读环境变量。如果你改了auth.json还是不生效检查一下系统里有没有设过OPENAI_API_KEY或OPENAI_BASE_URL这类变量它们的优先级可能高于文件。在 PowerShell 里查Get-ChildItem Env: | Where-Object Name -match OPENAI|CODEX|ANTHROPIC如果有输出把对应的用户级或系统级变量清掉或者改成和auth.json一致的值。改环境变量后要重启 Codex Desktop因为它只在启动时读一次。SSH 侧的配置也一并给出来。在机器 A 的C:\Users\你的用户名\.ssh\config里加一段Host win-remote HostName 192.168.1.50 User dev IdentityFile C:\Users\你的用户名\.ssh\id_ed25519 ServerAliveInterval 30 ServerAliveCountMax 3 StrictHostKeyChecking accept-newServerAliveInterval和ServerAliveCountMax解决空闲断连StrictHostKeyChecking accept-new让首次连接自动接受主机密钥避免卡在 yes/no 提示。配好之后ssh win-remote应该能直接进。这三件套——Base URL、Key、Model ID——在auth.json和 SSH config 里都要对齐缺一个都会在后面的验证步骤里暴露出来。4. 验证请求与远程项目加载从 SSH 连通到 Codex 拉取成功配置写完不能只看文件要实际验证。验证分三层SSH 能不能通、Codex Desktop 能不能用这个 Key 发请求、远程项目能不能被正确加载。每层都有明确的成功标志看到标志再往下走。第一层SSH 连通性。在机器 A 的 PowerShell 里ssh -o BatchModeyes -o ConnectTimeout10 win-remote cmd /c echo SSH_OKBatchModeyes强制只用密钥不弹密码。如果输出SSH_OK说明密钥认证和网络都通。如果报Permission denied (publickey)回到第 2 节检查authorized_keys和权限。如果报Connection timed out检查机器 B 的防火墙有没有放行 22 端口New-NetFirewallRule -Name sshd -DisplayName OpenSSH Server -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22第二层验证 TaoToken 的 Key 和 Base URL 能正常发请求。用 curl 直接打模型对话接口确认鉴权通过curl.exe -X POST https://taotoken.net/api/v1/messages -H Authorization: Bearer sk-你的TaoToken密钥 -H Content-Type: application/json -d {\model\:\claude-sonnet-4-20250514\,\max_tokens\:64,\messages\:[{\role\:\user\,\content\:\ping\}]}返回里如果有正常的content字段说明 Key 和 Base URL 都对。如果返回 401说明 Key 无效或没带上如果返回 404检查 Base URL 是不是写成了带/v1的完整路径——auth.json里填https://taotoken.net/api具体路径由客户端拼接。这一步过了模型服务层就没问题。第三层远程项目加载。在 Codex Desktop 里新建远程项目主机填win-remote对应 SSH config 里的 Host项目路径填C:\projects\foo。注意这里要用 Windows 路径风格不要写/projects/foo。加载成功的标志是左侧文件树能展开点开文件能看到内容保存后去机器 B 上确认文件确实变了。如果文件树展开但内容是空的多半是路径映射问题。可以在机器 A 上手动验证远端列目录ssh win-remote cmd /c dir C:\projects\foo有输出说明路径对Codex Desktop 里还空就是它内部的路径解析没适配 Windows 风格。这时候检查 Codex Desktop 的远程项目设置里有没有「路径风格」或「远端 OS」选项手动指定为 Windows。有些版本需要你在项目路径前加盘符前缀具体看版本说明。三层都过了之后建议做一次端到端测试在 Codex Desktop 里打开远程项目的一个文件改一行保存然后 SSH 到机器 B 用type看文件内容是否更新。这个闭环走通才算真正配好。5. 常见报错排查401、local proxy failed、reading choices、OAuth配的过程中会碰到几类固定报错每个都对应明确的根因。下面按报错原文对照排查你遇到哪个直接查哪个。401 Unauthorized或invalid api key。这是auth.json里的 Key 不对或没被读到。先确认文件路径是不是 Codex Desktop 实际读的那个用第 2 节的搜索命令。再确认 JSON 结构没改错Key 值没有多余空格或换行。最后用第 4 节的 curl 单独验证 Key 本身有效。三个都过了还报 401检查环境变量里有没有旧的OPENAI_API_KEY覆盖了文件配置。local proxy failed或connection refused。这个通常出现在你本地配了代理但代理没起来或者 Base URL 指向了一个本地端口。检查auth.json里的base_url是不是https://taotoken.net/api不要写成http://localhost:xxxx。同时检查系统代理设置如果开了全局代理但代理进程没运行请求会先被代理拦下来然后失败。把代理关掉或确保代理正常运行。reading choices或unexpected response format。这个报错说明请求发出去了、也返回了但返回结构不是 Codex Desktop 预期的格式。常见原因是 Base URL 路径拼错比如少写或多写了/v1导致打到了错误的端点。确认auth.json里base_url是https://taotoken.net/api客户端会自己拼/v1/messages。另外确认model字段填的模型 ID 在 TaoToken 支持列表里模型不存在时返回的错误结构也会触发这个报错。OAuth相关报错比如oauth token expired或failed to refresh token。Codex Desktop 某些版本会尝试走 OAuth 流程如果你用的是 API Key 模式需要在设置里明确选「API Key」而不是「OAuth」。检查auth.json里有没有残留的oauth字段有的话删掉。如果版本强制走 OAuth那就需要在 TaoToken 控制台确认对应的授权方式按文档走一遍授权流程。Permission denied (publickey)在 Codex Desktop 里出现但命令行 SSH 能通。这是 Codex Desktop 用的 SSH 配置和命令行不是同一套。它可能没读你的~/.ssh/config而是用了自己的连接参数。解决办法是在 Codex Desktop 的远程项目设置里显式填完整的主机、用户名、私钥路径不要依赖config里的 Host 别名。私钥路径填C:\Users\你的用户名\.ssh\id_ed25519。Broken pipe或操作卡住几分钟才报错。这是空闲断连SSH 连接被中间设备悄悄断了。在 SSH config 里加ServerAliveInterval 30和ServerAliveCountMax 3让客户端定期发保活包。Codex Desktop 如果用自己的连接参数就在它的设置里找 keepalive 相关选项填 30 秒。bad interpreter或脚本执行报错。这是换行符问题Windows 上保存的文件变成了 CRLF远端按 LF 解析的脚本就废了。在 Codex Desktop 里把文件换行符设成 LF或者保存后用命令转换ssh win-remote powershell -Command \(Get-Content C:\projects\foo\script.sh -Raw) -replace \rn\, \n\ | Set-Content C:\projects\foo\script.sh -NoNewline\排查顺序建议先命令行 SSH 确认传输层再 curl 确认模型服务层最后 Codex Desktop 里确认应用层。每层单独验证不要混在一起猜。6. 把配置固化下来长期使用与后续接入配置调通之后要做的是让它稳定而不是每次重启都重新折腾。第一件事是把auth.json和 SSH config 纳入版本管理或者至少做个备份脚本。auth.json里有 Key不要提交到公开仓库可以放在加密的密码管理器里或者用脚本从环境变量生成。SSH config 可以正常备份它不含敏感信息。第二件事是 Key 的轮换。TaoToken 控制台里可以生成多个 Key建议给 Codex Desktop 单独一个给其他工具各用各的。这样某个 Key 出问题或者要轮换时影响面可控。轮换的时候只需要改auth.json里的api_key字段重启 Codex Desktop 即可SSH 侧不用动。第三件事是远程项目的路径规范。既然远端是 Windows OpenSSH项目路径统一用C:\风格不要在不同项目里混用/和\。如果团队里有人用 Linux 远端、有人用 Windows 远端可以在 Codex Desktop 里为每个远程主机单独建配置路径风格跟着主机走。这样切换项目的时候不会因为路径风格串了而报错。如果你后面要接更多工具比如在命令行里用 Codex 或者接 CI 流程Base URL 和 Key 的用法是一致的。模型对话入口可以用来快速验证 Key 是否有效接入文档里有各客户端的配置示例。长期做编码和 Agent 任务的话Coding Plan 那边有更完整的额度方案适合把日常开发都挂上去。API Keys 页面负责生成和管理密钥控制台看用量和调用记录。最后给一个自检清单每次改完配置按这个过一遍auth.json路径对不对、JSON 结构有没有改错、Key 有没有多余字符、Base URL 是不是https://taotoken.net/api、环境变量有没有冲突、SSH 命令行能不能通、远端路径风格是不是 Windows、换行符有没有被转成 CRLF。这八项都过Codex Desktop 连 Windows OpenSSH 远程项目就不会再在认证和路径上翻车。