最近折腾 Codex CLI 的时候,总会遇到一个尴尬场景:代码写到一半,人已经不在电脑前,但脑子里还在想下一条指令怎么给。等项目跑完回到工位,发现输出结果早就出来了,白白浪费了一段等待时间。后来把手边的旧手机翻出来,直接通过 SSH 连回台式机操作 Codex,发现体验其实挺顺畅的。这篇文章就把这套“手机远程用 Codex”的完整思路整理一遍,包括电脑端配置、手机端连接、多模型互通,以及几个高频坑的排查方法。
内容覆盖三块核心需求:一是让 Codex CLI 跑在电脑上,手机只作为远程控制端;二是通过 SSH 隧道转发或参数配置,让手机与电脑之间的指令和输出保持稳定;三是在同一个 Codex 环境中配置多个模型并自由切换。无论你是想远程跑通一个脚本,还是想在通勤路上给开发任务收个尾,这套方案都能直接参考。
1. 背景与核心概念
1.1 Codex 是什么,为什么需要远程使用
Codex 是 OpenAI 推出的智能编程命令行工具,它以对话方式运行在终端中,能够读取项目目录结构、分析代码上下文并直接执行命令或生成代码片段。你可以把它理解成一个跑在终端里的 AI 编程助手,特别适合代码生成、文件修改、命令执行和项目级任务编排。
但 Codex 默认运行在你启动它的那台机器上。如果你在公司电脑上启动,就只能在公司电脑上操作;出差或回家后想继续使用,就得重新配置环境。远程使用的核心价值在于:
- 代码和运行环境都留在电脑端,不需要在手机、平板上重复搭建开发环境。
- 长耗时任务放在电脑端跑,手机随时查看输出结果。
- 一个模型配置、一套环境变量,多个设备共享。
1.2 远程控制的本质:手机 + SSH + Codex
手机远程使用 Codex,并不是在手机里装 Codex,而是通过 SSH 连接电脑终端,然后在终端中启动 Codex。整个过程可以理解为:
- 电脑端:安装 Codex CLI,配置模型 API,保持 SSH 服务可用。
- 手机端:安装 SSH 客户端(如 Termius、JuiceSSH),连接电脑。
- 连接建立后,手机上的终端窗口等同于电脑终端,可以输入 Codex 指令并查看输出。
这种方式的好处是轻量。手机只承担终端渲染和键盘输入,计算与推理全部在电脑端完成。而且 SSH 自带加密,比明文 Telnet 安全得多。
1.3 多模型互通:一套 Codex 环境对应多个模型
Codex CLI 的模型配置支持通过环境变量、配置文件或--model参数指定。也就是说,你可以在同一台电脑上配置 OpenAI 官方模型、第三方兼容模型或本地模型,然后在运行 Codex 时自由切换。多模型互通的好处是:
- 不同任务选用不同模型,例如代码生成用模型 A,代码审查用模型 B。
- 某个模型 API 临时不可用时,切到备用模型继续工作。
- 多个设备通过远程连接访问同一套模型配置,不需要每台设备单独设置。
后面我们会用一个完整的示例,演示如何配置两个模型并在手机远程操作中切换。
2. 环境准备与版本说明
2.1 软硬件需求
下面是本文示例所需的运行环境。版本需要根据你的项目实际情况调整,这里以常见环境为例,重点演示配置思路。
| 端侧 | 要求 | 说明 |
|---|---|---|
| 电脑端 | Windows 10/11、macOS、Linux 均可 | 本文以 Windows 11 为例 |
| 手机端 | Android / iOS | 需要 SSH 客户端 App |
| Codex CLI | 最新稳定版 | 安装方式见下文 |
| Node.js | 18.0 以上 | Codex CLI 依赖 Node.js 运行 |
| SSH 服务 | 电脑端开启 OpenSSH Server | Windows 可选功能 |
| 网络 | 电脑与手机处于同一局域网,或电脑具备公网地址 / 内网穿透条件 | 不在同一局域网时需要额外配置 |
2.2 安装 Codex CLI
Codex CLI 可以通过 npm 安装。打开电脑终端,执行:
npm install -g @openai/codex安装完成后,检查版本:
codex --version如果输出类似codex 0.x.x,说明安装成功。如果提示找不到命令,请检查 Node.js 是否已加入 PATH,或重新打开终端窗口。
2.3 配置模型 API
Codex CLI 支持通过环境变量指定模型服务地址和 API Key。以 OpenAI 官方模型为例:
export OPENAI_API_KEY="sk-你的密钥" export OPENAI_BASE_URL="https://api.openai.com"也可以创建~/.codex/config.toml配置文件,持久化保存:
model = "gpt-5" api_key = "sk-你的密钥" base_url = "https://api.openai.com"如果你使用了第三方兼容服务,例如 DeepSeek、智谱或其他支持 OpenAI 协议的服务,只需要修改base_url和model即可。
2.4 开启电脑端 SSH 服务
Windows 10/11 开启 OpenSSH Server 的方法是:进入“设置” -> “系统” -> “可选功能” -> 点击“添加可选功能”,搜索“OpenSSH 服务器”并安装。安装完成后,在“服务”中启动sshd,并将启动类型设为“自动”。
macOS 和 Linux 通常在“系统设置 -> 共享”中开启“远程登录”,或执行:
sudo systemctl enable --now sshd开启 SSH 后,建议使用密钥登录而不是密码登录。我们会在下一节详细介绍。
3. 核心原理与配置拆解
3.1 SSH 连接的基本流程
手机远程连接电脑的过程,本质上是建立一个 SSH 会话。SSH 客户端与电脑端sshd服务握手后,创建一个加密通道,手机终端的所有输入输出都通过这个通道传输。
在局域网内,连接命令非常简单:
ssh 用户名@电脑IP地址但这里的“用户名”是电脑上的系统用户名,不是 Codex 或 OpenAI 的账号。电脑 IP 地址可以通过ipconfig(Windows)或ifconfig(macOS/Linux)查看。
3.2 端口转发:让手机找到 Codex 的“入口”
如果电脑和手机不在同一个局域网,比如你在外面用 4G/5G 网络,就需要让手机的 SSH 连接能到达电脑。常见方案有三种:
- 公网 IP + 端口映射:在路由器上把 22 端口映射到电脑内网 IP,但需要公网 IP 且存在暴露风险。
- 内网穿透工具:通过 frp、Tailscale、ZeroTier 等工具组建虚拟局域网,安全且无需公网 IP。
- 第三方 SSH 中转服务:部分 SSH 客户端内置中转功能,但配置相对复杂。
本文示例以同一局域网为准,这样最简单、也最安全。如果你确实需要跨公网访问,推荐使用 Tailscale 这类零配置组网工具,不直接暴露端口。
3.3 多模型配置的结构
Codex 的模型配置最终都汇聚到config.toml中。一个支持两个模型的配置示例:
[profiles] [profiles.openai] model = "gpt-5" base_url = "https://api.openai.com" api_key = "sk-openai-key" [profiles.deepseek] model = "deepseek-reasoner" base_url = "https://api.deepseek.com" api_key = "sk-deepseek-key"运行 Codex 时,通过--profile参数选择不同配置:
codex --profile openai codex --profile deepseek这样,同一台电脑上就有了两个模型入口。手机远程连接后,在手机终端的 Codex 会话中随时切换。
4. 完整实战:手机远程使用 Codex
下面进入完整实操。我们从电脑端配置开始,一步步走到手机端操作。
4.1 电脑端配置 SSH 密钥登录
先为电脑创建一个 SSH 密钥对。在电脑终端执行:
ssh-keygen -t ed25519 -C "mobile-access"一路回车即可,生成的默认路径是C:\Users\你的用户名\.ssh\id_ed25519。然后查看公钥:
type C:\Users\你的用户名\.ssh\id_ed25519.pub复制公钥内容,写入电脑的authorized_keys文件中。Windows OpenSSH Server 的授权文件路径通常是:
C:\ProgramData\ssh\administrators_authorized_keys或者,如果是普通用户,路径为:
C:\Users\你的用户名\.ssh\authorized_keysmacOS / Linux 则是:
~/.ssh/authorized_keys写入公钥后,重启 SSH 服务:
sudo systemctl restart sshd4.2 手机端连接电脑
在手机上安装 Termius(iOS/Android 均支持),选择 “New Host”,填写电脑的局域网 IP、SSH 用户名,然后在密钥管理中导入第 4.1 步生成的私钥。
点击连接后,手机会出现一个 Linux/Windows 终端界面。输入uname -a或者echo $HOSTNAME,如果返回电脑的系统信息,说明连接成功。
4.3 在手机终端中启动 Codex
SSH 连接成功后,直接输入:
codex如果 Codex 已经在 PATH 中,它会正常启动。手机终端会显示 Codex 的交互界面,你可以输入中文或英文指令,例如:
请帮我写一个 Python 脚本,统计当前目录下所有 .txt 文件的行数电脑端 Codex 会读取当前目录结构,生成并执行脚本。你会在手机终端看到完整输出。
如果手机端提示找不到codex命令,可能是因为 SSH 登录的是非登录 shell,PATH 中没有包含 npm 全局目录。可以在手机终端先执行:
export PATH="$PATH:$(npm prefix -g)/bin"再运行codex。
4.4 使用多模型切换
在 Codex 会话中,可以通过菜单或配置指定模型。假设你已经配置好了openai和deepseek两个 profile,在手机终端中:
codex --profile deepseek此时 Codex 会使用 DeepSeek 模型。输入一条指令,观察模型行为。如果想切回 OpenAI:
codex --profile openai每次切换都会启动一个新的 Codex 会话,之前的会话上下文不会保留。如果需要同时维护多个会话,建议使用终端的多标签功能(如 Termius 的多会话支持)。
4.5 在电脑端查看任务状态
手机终端的输出与电脑终端基本同步。你可以在手机上发起一个长任务,例如:
请执行 npm run build,并将错误日志输出到 build.log然后锁屏。等任务完成后,重新打开手机终端,看到 Codex 已经停在新的输入提示符。build.log 的内容可以随时查看:
tail -n 50 build.log这里需要注意:SSH 会话如果被手机端强制断开(比如锁屏时间过长、网络切换),正在执行的命令可能会被终止。为了避免这个问题,可以使用tmux或screen保持会话。我们会在后面的最佳实践中详细说。
5. 常见问题与排查思路
远程使用 Codex 过程中,最容易出问题的集中在几个环节。下面整理成表格,方便对照排查。
| 问题现象 | 常见原因 | 解决思路 |
|---|---|---|
| 手机 SSH 连接时提示“远程计算机拒绝连接” | 电脑端 SSH 服务未启动,或防火墙拦截 22 端口 | 检查 sshd 服务状态,确认防火墙放行 22 |
| 连接后输入命令没有任何输出 | 终端没有进入交互 shell,或 PATH 错误 | 执行ls、echo $PATH检查基本命令 |
codex命令不存在 | npm 全局目录不在 SSH 的 PATH 中 | 手动添加 PATH,或使用绝对路径执行 |
| Codex 切换模型后没有变化 | 配置文件中的 profile 名称拼写错误 | 检查config.toml中的 profiles 区块 |
| 锁屏后 SSH 会话中断 | 手机端网络切换或被系统回收 | 使用 tmux / screen 保持会话 |
| 网络延迟导致输入卡顿 | SSH 会话交互受网络质量影响 | 尝试更换网络;或使用 Mosh 替代 SSH 客户端 |
| Codex 启动后无法连接模型 API | 电脑端防火墙限制出网,或 API Key 无效 | 检查环境变量OPENAI_API_KEY与OPENAI_BASE_URL |
5.1 远程计算机拒绝连接
这是出现频率最高的报错。电脑端如果安装 OpenSSH Server,但服务没有启动,就会拒绝连接。排查步骤如下:
第一步,在电脑本地打开终端,测试 sshd 是否运行:
Get-Service sshd如果显示 Stopped,执行:
Start-Service sshd第二步,确认防火墙规则。以管理员身份运行:
New-NetFirewallRule -Name "Allow SSH" -DisplayName "Allow SSH" -Protocol TCP -LocalPort 22 -Action Allow第三步,在电脑上从本机连接自己,验证服务可用:
ssh 用户名@localhost如果本地能连,说明服务正常,问题出在局域网或防火墙层面。此时检查手机和电脑是不是在同一个网段,并尝试用电脑的 IP Ping 通。
5.2 SSH 端口的 PATH 问题
用 SSH 登录后,环境变量未必和电脑本地登录时完全一致。特别是 Windows OpenSSH Server 默认不加载用户的环境变量,导致 npm 全局目录中的codex命令无法执行。
解法是在 SSH 会话中手动补充:
export PATH="$PATH:$(npm prefix -g)/bin"如果你用zsh或bash,建议把这一行写入~/.bashrc或~/.zshrc,这样每次登录自动生效。
5.3 Codex 响应中断或超时
当模型 API 响应较慢,或者网络不稳定时,Codex 可能长时间没有输出。这通常不是 Codex 本身卡住,而是在等待 API 返回。排查步骤:
- 先轻量测试 API 连通性:
curl <base_url>看是否返回 200。 - 确认 API Key 是否有效,检查账户余额。
- 确认配置文件中
base_url是否带了多余的路径(比如/v1),不同服务的要求不同。
如果长期在移动网络下使用,建议任务尽量短小,或者把长任务放到 tmux 中执行,避免网络切换导致会话中断。
6. 最佳实践与工程建议
6.1 优先使用密钥认证而非密码
SSH 暴露在网络环境中,密码认证容易受到暴力破解攻击。建议电脑端开启密钥认证并关闭密码登录。具体做法是把 SSH 配置文件中的PasswordAuthentication设为no:
# /etc/ssh/sshd_config PasswordAuthentication no PubkeyAuthentication yes这样手机端连接时只验证密钥,安全性显著提升。请妥善保管私钥,不要放到公共网盘或聊天记录中。
6.2 使用 tmux 保持任务不中断
在手机远程使用 Codex 时,最怕的是命令跑到一半网络断了。SSH 一旦断开,前台运行的进程会收到终端关闭信号而退出。解决办法是在电脑端启动一个 tmux 会话:
tmux new -s codex-remote codex手机连接后,先重新接入这个会话:
tmux attach -t codex-remote这样即使手机与电脑断开,Codex 进程仍在 tmux 中运行。重新连接后再 attach,就能看到完整输出。这是一个很实用的技巧,强烈建议远程使用前先 tmux。
6.3 配置文件管理
不同模型的 API Key 不要直接明写在代码或随手创建的脚本中。Codex 支持从配置文件读取配置,也支持从环境变量读取。更稳妥的做法是使用系统密钥管理器或.env文件,并在.env中加入:
OPENAI_API_KEY=sk-... DEEPSEEK_API_KEY=sk-...然后通过加载环境变量供 Codex 使用。不要把 API Key 提交到代码仓库。
6.4 网络与安全边界
在服务器上开启远程访问时,要严格限制访问来源。对于局域网用户,通过防火墙只允许内网网段访问 22 端口,不要暴露到公网。对于跨网络访问,推荐使用 Tailscale 一类组网工具,而不是在路由器上映射 22 端口。涉及公网访问时,务必经过合法授权和风险评估,遵循最小权限原则。
6.5 多模型选择的适用场景
不同模型适合不同任务:
- OpenAI 官方模型在复杂代码生成、推理类任务上表现稳定。
- DeepSeek 类模型在中文理解、代码补全上也有不错效果,且接口兼容 OpenAI 协议,切换成本低。
- 本地模型(如 Ollama 启动的 Qwen、Llama)延迟低,适合离线环境或隐私要求较高的场景。
建议在config.toml中维护清晰的 profile 名称,别用model1、model2这种无意义命名。将来加模型时,一眼就能看出每个 profile 对应什么服务。
6.6 远程操作的排错清单
最后整理一份远程使用 Codex 的排错清单,供你在遇到问题时按顺序检查:
- [ ] 电脑端 sshd 是否运行
- [ ] 电脑端防火墙是否放行 22 端口
- [ ] 手机与电脑是否在同一局域网,IP 是否可达
- [ ] SSH 用户名是否正确
- [ ] 密钥是否已正确导入电脑的 authorized_keys
- [ ] SSH 登录后是否能执行
ls、pwd - [ ]
codex --version能否输出版本号 - [ ] 启动 Codex 是否进入交互界面
- [ ] 运行指令后是否有 API 响应
7. 总结与学习路线
这套方案的实用之处在于:电脑上只维护一套 Codex 环境,手机通过 SSH 连入后即可操作。多模型配置通过config.toml的 profile 管理,切换模型只是启动参数不同。局域网内配置起来非常简单,适合日常开发;跨网络场景则推荐用组网工具,安全性和稳定性都更有保障。
接下来可以继续尝试的方向包括:在电脑端用 tmux 同时管理多个 Codex 任务、把手机终端换成更轻量的 SSH 方案、将模型切换封装成 Shell 快捷脚本。如果手上没有 OpenAI 官方 Key,也可以先用 DeepSeek 等兼容接口跑通整个远程流程,后续再慢慢扩容模型列表。整个配置链路打通之后,你会发现“手机远程跑 Codex”并不是一个花哨操作,而是真正能提高开发利用率的小基建。