☰
手机远程连接WSL2中的Codex CLI:Tailscale私有网络+Termius+OpenSSH+tmux实战(CodexCli)
2026/9/26 15:24:03 网站建设 项目流程

1. 为什么要在手机上接管 WSL2 里的 Codex CLI

Codex CLI 跑在 WSL2 里,本质是一个长期驻留的终端程序:它读你当前仓库的代码、维护会话上下文、调用模型生成补丁。问题在于,它被绑死在电脑前。你一旦合上笔记本、离开工位、或者只是想去倒杯水,那个会话就断了,回来还得重新codex resume,上下文虽然能恢复,但中间那段时间的等待和打断感很烦。

我想要的不是"手机上看代码",而是"手机上继续操作同一个 Codex CLI 会话"。这两件事差别很大:前者是只读,后者要求手机能输入、能提交、能中断、能恢复,而且断网重连后会话不能丢。要做到这一点,核心不是找一个手机 SSH 客户端,而是把 Codex CLI 从 SSH 连接里解耦出来——SSH 只是显示层,tmux 才是承载层。

这套架构由四块拼起来:Tailscale 把手机和电脑放进同一个加密私有网络,不需要在路由器上暴露 22 端口;Windows OpenSSH Server 作为稳定入口,因为 WSL2 的 172.x.x.x 虚拟 IP 会变,直接连它不靠谱;WSL2 Ubuntu 是 Codex CLI 真正运行的地方;tmux 负责让 Codex 在 SSH 断开后继续活着。手机端用 Termius 连接,配合 Paste mode 和 Snippets 解决移动端输入痛点。

适合谁:已经在 WSL2 里用 Codex CLI 做日常开发、希望通勤或离开工位时也能推进任务的人。如果你还没在 WSL2 里跑通 Codex CLI,建议先把本地跑顺,再来看远程接入。

2. 前置准备:TaoToken 接入与 Codex CLI 环境确认

Codex CLI 需要一个模型服务端点。我这边用的是 TaoToken 提供的兼容接口,它把模型调用统一成 OpenAI 风格的 API,Codex CLI 配置起来比较直接。官网在 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 基址是 https://taotoken.net/api 。

先在 WSL2 Ubuntu 里确认 Codex CLI 已安装并登录过。如果你还没配好 API Key,去控制台创建一个:https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite ,然后在 API Keys 页面生成密钥:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite 。密钥只显示一次,复制后存到安全的地方。

Codex CLI 的配置通常放在~/.codex/config.toml或通过环境变量注入。一个最小可用的环境变量写法:

export OPENAI_API_KEY="sk-你的TaoToken密钥" export OPENAI_BASE_URL="https://taotoken.net/api"

如果你用的是 Codex CLI 的配置文件方式,在~/.codex/config.toml里指定 provider 和 base_url,把https://taotoken.net/api填进去即可。具体字段名以你安装的 Codex CLI 版本为准,可以用codex --help或查看官方文档确认。

验证本地能跑通:

cd ~/projects/你的项目 codex

能进入交互界面、能正常对话,说明本地链路没问题。接下来才是把它搬到手机上。

另外确认 WSL 发行版名称,这个后面会反复用到:

wsl --list --verbose

输出类似:

NAME STATE VERSION * Ubuntu-24.04 Running 2

记下这个 NAME,比如Ubuntu-24.04。如果你写wsl -d Ubuntu但系统里没有这个名称,会报WSL_E_DISTRO_NOT_FOUND。

3. 可复制配置:OpenSSH Server + Tailscale + tmux 骨架

3.1 在 Windows 上启用 OpenSSH Server

以管理员身份打开 PowerShell,逐条执行:

# 查看 OpenSSH Server 组件状态 Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH.Server*' # 安装 OpenSSH Server Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0 # 启动 sshd 服务 Start-Service sshd # 设置为开机自启 Set-Service -Name sshd -StartupType Automatic # 确认运行状态 Get-Service sshd

最后一条应显示Running。再检查 22 端口监听:

netstat -an | findstr :22

看到0.0.0.0:22 LISTENING就对了。防火墙规则检查:

Get-NetFirewallRule -Name OpenSSH-Server-In-TCP

如果规则不存在,手动创建:

New-NetFirewallRule ` -Name OpenSSH-Server-In-TCP ` -DisplayName 'OpenSSH SSH Server (sshd)' ` -Enabled True ` -Direction Inbound ` -Protocol TCP ` -Action Allow ` -LocalPort 22

3.2 Tailscale 组网

电脑和手机都安装 Tailscale,登录同一个账号(同一个 Tailnet)。在电脑端确认 Tailscale 处于在线状态,并允许传入连接。手机端能看到电脑的 Tailscale IP,形如100.x.x.x。

Termius 里填的是这个100.x.x.x,不是localhost,不是路由器分配的192.168.x.x,也不是 WSL2 的172.x.x.x。这一点最容易搞混。

3.3 tmux 配置骨架

在 WSL2 Ubuntu 里安装 tmux:

sudo apt update sudo apt install -y tmux

一个够用的~/.tmux.conf:

# 前缀键改为 Ctrl+A,减少和终端快捷键冲突 set -g prefix C-a unbind C-b bind C-a send-prefix # 开启鼠标支持,方便手机端滚动 set -g mouse on # 窗口编号从 1 开始 set -g base-index 1 setw -g pane-base-index 1 # 增大回滚缓冲,手机上看长输出不丢 set -g history-limit 50000 # 状态栏显示会话名 set -g status-left '[#S] '

重载配置:

tmux source-file ~/.tmux.conf

3.4 创建承载 Codex 的会话

tmux new -s codex cd ~/projects/你的项目 codex

底部出现[codex] 0:bash*说明已在 tmux 内。Codex 启动后,这个会话就独立于 SSH 连接了。

4. 验证请求:手机端连接与成功结果

4.1 Termius 添加主机

在 Termius 新建 Host:

字段值
AddressWindows 的 Tailscale IP(100.x.x.x)
Port22
UsernameWindows 用户名
PasswordWindows 账户密码

注意:这里要的是 Windows 账户密码,不是 Windows Hello PIN。如果你 PIN 和密码设成一样,看起来像用 PIN 登录,其实不是。

首次连接会显示主机密钥指纹,确认是自己的电脑后接受。

连接成功后看到的是 Windows 命令行,不是 Ubuntu。然后进入 WSL:

wsl -d Ubuntu-24.04

再附加到 tmux 会话:

tmux attach -t codex

此时你应该看到 Codex CLI 的界面,和电脑上完全一致。

4.2 验证 Codex 会话可复用

在手机 Termius 里向 Codex 发一条消息,比如让它解释当前目录某个文件。确认有响应后,按Ctrl+B松开,再按d,看到:

[detached from codex]

然后断开 Termius。重新连接,执行tmux attach -t codex,Codex 会话还在,上下文没丢。这就是整套方案的核心验证点。

4.3 用 Snippets 简化流程

Termius 底部快捷栏的{}按钮可以保存 Snippets。保存一个"进入 Codex":

wsl.exe -d Ubuntu-24.04 -e tmux new-session -A -s codex -c /home/你的用户名/projects/你的项目

-A表示会话存在就附加、不存在就创建,-c指定工作目录。再保存一个"恢复 Codex":

codex resume --last

以后连接 Windows 后点两次 Snippet 就回到工作状态。

5. 本篇常见错排查

Connection refused:sshd 没跑或 22 没监听。Start-Service sshd,再netstat -an | findstr :22。

Termius 一直超时:Tailscale 没连通、Windows 休眠、或入站被拦。检查两端 Tailscale 状态、电源设置、防火墙规则。

密码始终错误:用了 Windows Hello PIN。改用账户密码,稳定后建议换 SSH 密钥。

WSL_E_DISTRO_NOT_FOUND:发行版名称写错。wsl --list --verbose拿准确名称。

duplicate session: codex:tmux 会话已存在。用tmux attach -t codex,别重复创建。

already has an active writer:旧 Codex 进程还占着会话。先pgrep -af codex看进程,确认是独立的 codex 进程后kill <pid>,等它退出再codex resume --last。注意输出里可能混着codex-clipboard-bridge和tmux new -s codex这种命令参数里带 codex 的进程,别误杀。

手机锁屏后 SSH 断开:移动系统限制后台。tmux 保住了服务端会话,重连tmux attach -t codex即可。Android 可以关掉 Termius 的电池优化。

中文显示方框:终端字体或 locale 不匹配。检查 Termius 字体、终端编码,以及 WSL 的locale设置。

手机打字慢:用 Termius Paste mode,先在备忘录写好提示词再粘贴;或者切 Paste mode 后用语音输入。常用命令存成 Snippets。

6. 长期编码与 Agent 场景的接入建议

如果你只是偶尔在手机上查一下 Codex 的输出,上面这套已经够用。但如果你打算把手机当成日常编码入口之一,有几个点值得提前配好。

第一,SSH 密钥替代密码。在 Termius 里生成密钥对,把公钥放到 Windows 的~/.ssh/authorized_keys,之后连接不用输密码,手机端体验顺很多。

第二,把 Codex 的模型端点固定到 TaoToken 的 API 基址https://taotoken.net/api,避免每次换环境都要改配置。如果你同时用多个模型做对比,可以在模型对话页面直接试:https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_content=chat&utm_campaign=rewrite 。

第三,如果你跑的是长时间编码任务或 Agent 循环,考虑用 Coding Plan 把额度固定下来,避免按次调用时中途断掉:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite 。接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite ,里面有各语言 SDK 和端点说明。

第四,Claude Code 用户如果也想走类似链路,可以参考 Anthropic 兼容接入的配置方式:https://taotoken.net/claude-code-anthropic?utm_source=taotoken_aicg_blog_end&utm_content=claude-code-anthropic&utm_campaign=rewrite 。

日常流程简化成:电脑端tmux new -s codex起会话,离开时Ctrl+B再d;手机端开 Tailscale,Termius 连 Windows 的 Tailscale IP,点"进入 Codex"Snippet,tmux attach -t codex;回到电脑想接管,tmux attach -d -t codex把会话抢回来。Codex 始终在 WSL2 里跑,手机只是显示和输入,代码、依赖、密钥都留在本地。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询