1. 春节返乡路上,为什么我非要把 Claude Code 塞进手机
春节返乡的高铁上,邻座在刷短视频,我在手机上敲tmux attach。这不是段子,是我今年春运的真实状态。Claude Code 是个纯命令行工具,跑在电脑上,你一离开工位就彻底断联。但灵感这东西不讲道理,往往在你拎着年货挤地铁、在老家炕上陪亲戚唠嗑的时候突然冒出来。这时候如果手边只有手机,那种"想干活却够不着电脑"的憋屈,比加班还难受。
所以我把整套远程方案在春节前跑通了一遍,核心就三招:SSH 负责连回电脑,Tailscale 负责让手机和电脑虚拟同网,tmux 负责让会话在断网后原地复活。这套组合的好处是免费、全自主可控,不依赖任何第三方 App 的付费墙。适合谁?适合手里有一台常年开机的电脑(家里台式机、公司工位机、或者一台小主机),又想在通勤、返乡、走亲戚间隙远程驱动 Claude Code 的人。下面我把可复制的 SSH config、Tailscale 组网步骤、tmux 保活命令全部摊开,你照着做就能在手机上把 Claude Code 跑起来。
2. 前置准备:TaoToken 接入 Claude Code 与三件套安装
在折腾远程之前,得先保证你电脑上的 Claude Code 能正常调用模型。我这边用的是 TaoToken 的 API 接入方式,它兼容 Anthropic 的接口协议,配置起来就是改两个环境变量的事。官网在 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 地址是 https://taotoken.net/api ,注意 API 域名后面不加任何 UTM 参数。
先在电脑上把 Claude Code 装好,然后配置环境变量。Linux/macOS 写进~/.bashrc或~/.zshrc,Windows 用系统环境变量面板:
export ANTHROPIC_BASE_URL="https://taotoken.net/api" export ANTHROPIC_API_KEY="你的TaoToken密钥"密钥去控制台拿,地址是 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite ,进去后在 API Keys 页面创建一个,复制出来填到上面。接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite ,里面有不同客户端的详细配置说明,遇到字段对不上可以翻一下。
三件套的安装:Tailscale 去官网下对应平台的安装包,Windows、macOS、Linux 都有;tmux 在 Linux 上sudo apt install tmux或brew install tmux,Windows 用户建议直接在 WSL2 里跑 Claude Code,这样 tmux 和 SSH 都是原生体验;手机端 SSH 客户端我用的 Termius,iOS 和安卓都有,免费版够用。
注意:Claude Code 必须跑在有 tmux 的环境里,Windows 原生 CMD 没有 tmux,所以强烈建议 WSL2 或纯 Linux 主机。
3. 可复制配置:Tailscale 组网 + SSH config + tmux 保活
3.1 Tailscale 组网,让手机和电脑虚拟同网
Tailscale 的原理是给每台设备分配一个 100.x.x.x 段的私有 IP,设备之间走加密隧道直连,不需要公网 IP,也不用改路由器防火墙。电脑和手机都装上 Tailscale,用同一个账号登录,它们就自动在同一个虚拟局域网里了。
电脑端安装后登录:
# Linux 安装 curl -fsSL https://tailscale.com/install.sh | sh sudo tailscale up # 会输出一个 URL,浏览器打开登录授权登录后查看本机 Tailscale IP:
tailscale ip -4 # 输出类似 100.101.102.103手机端去 App Store 或应用商店搜 Tailscale,安装后用同一账号登录,状态显示 Connected 即可。在手机 Tailscale App 里能看到电脑的 100 段 IP,记下来,SSH 就连这个地址。
3.2 电脑端开启 SSH 服务
Linux 上确认 sshd 在跑:
sudo systemctl enable --now ssh sudo systemctl status sshWindows 的话在"设置 → 应用 → 可选功能"里装 OpenSSH Server,然后Start-Service sshd并设为自动启动。WSL2 用户注意,WSL 的 SSH 和 Windows 宿主是两套,建议直接在 WSL 里跑 sshd,端口映射用netsh interface portproxy转发,或者干脆用 Tailscale 的 WSL 版本。
3.3 手机端 SSH config 与连接
Termius 里新建 Host,地址填电脑的 Tailscale IP(100.x.x.x),端口 22,用户名填你电脑的登录名,认证方式选密钥或密码。密钥方式更安全,把手机生成的公钥追加到电脑的~/.ssh/authorized_keys里。
连上之后,先别急着跑 Claude Code,先建 tmux 会话:
tmux new -s claude这个-s claude是给会话起名,方便后面 attach。进去之后正常启动 Claude Code:
claude现在 Claude Code 就跑在 tmux 会话里了。手机 SSH 断线、切后台、锁屏,tmux 会话在服务端一直活着。重新连上后:
tmux attach -t claudeClaude Code 还在原地,对话历史、执行进度一条不丢。这就是 tmux 的核心价值——SSH 是脆弱的,tmux 是持久的。
3.4 让 tmux 更好用的几个配置
在电脑上写~/.tmux.conf:
# 开启鼠标滚动 set -g mouse on # 增大回滚缓冲,方便手机上看历史输出 set -g history-limit 50000 # 状态栏显示会话名 set -g status-right "#{session_name}"改完tmux source-file ~/.tmux.conf生效。手机小屏幕上,鼠标滚动和足够大的回滚缓冲能救命,Claude Code 输出长的时候你往上翻不会丢内容。
4. 验证请求:手机端跑通一次完整 Claude Code 交互
配置完别急着高兴,按下面步骤验证一遍,确认整条链路通。
第一步,手机连上 Tailscale,确认状态 Connected。第二步,Termius 连 SSH,执行tmux ls,应该能看到之前建的claude会话。第三步,tmux attach -t claude,如果 Claude Code 已经在跑,直接就能看到界面;如果没跑,手动claude启动。
第四步,发一条测试指令,比如:
帮我看看当前目录下有哪些文件,并解释 package.json 的作用Claude Code 会调用工具列目录、读文件,然后返回解释。这一步验证的是模型调用链路——也就是 TaoToken 的 API 是否正常。如果返回正常,说明ANTHROPIC_BASE_URL和密钥都配对了。
第五步,故意断网测试保活。手机开飞行模式 10 秒再关掉,Termius 会显示断线,重新连接后tmux attach -t claude,看 Claude Code 是否还在。如果还在,tmux 保活验证通过。
第六步,验证长任务。让 Claude Code 跑一个稍慢的任务,比如:
帮我把 src 目录下所有 .js 文件的 var 改成 const,改完列出修改清单任务跑到一半时锁屏,等两分钟再解锁重连,看它是否继续执行完。这一步验证的是断线期间服务端进程不受影响。
提示:如果手机端 Termius 频繁断连,检查 Tailscale 是否被系统省电策略杀掉,iOS 上把 Tailscale 设为"始终允许后台",安卓上关掉电池优化。
5. 本篇常见错排查
连不上 SSH,提示 Connection refused。先确认电脑 sshd 在跑,systemctl status ssh看状态。再确认 Tailscale 两端都 Connected,tailscale status能看到对方设备。如果 Tailscale 显示 relay 而不是 direct,说明打洞失败走了中继,速度会慢但能通,不影响功能。
tmux attach 提示 no sessions。说明会话没建成功或者被杀了。检查是不是在 SSH 会话里直接tmux new -s claude之后又exit了——exit会杀掉会话。正确做法是tmux new -s claude后按Ctrl+b再按d分离,会话才持久。
Claude Code 报 API 错误 401 或 403。密钥没配对或者过期了。去 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite 重新生成一个,确认ANTHROPIC_API_KEY环境变量在当前 shell 里生效,echo $ANTHROPIC_API_KEY检查一下。注意环境变量要写在 tmux 启动之前,如果先开了 tmux 再改环境变量,tmux 里的 shell 读不到新值,得tmux kill-server重来。
手机端中文输入乱码。Termius 的编码设置改成 UTF-8,电脑端locale确认是en_US.UTF-8或zh_CN.UTF-8。tmux 里如果显示乱码,在~/.tmux.conf加set -g default-terminal "screen-256color"。
Tailscale IP 变了。正常情况下 100 段 IP 是固定的,但如果设备重新登录或者账号切换,IP 可能变。养成习惯每次连之前tailscale ip -4确认一下,或者用 Tailscale 的 MagicDNS 功能,直接用设备名代替 IP,比如ssh 我的电脑。
Claude Code 在 tmux 里颜色错乱。在~/.tmux.conf加set -g default-terminal "tmux-256color",然后tmux kill-server重启。手机端 Termius 的终端类型也设成xterm-256color。
6. 长期编码与 Agent 场景的接入建议
如果你只是偶尔在手机上查个进度、发个指令,上面这套 SSH + Tailscale + tmux 就够了。但如果你打算长期在移动端驱动 Claude Code 跑 Agent 任务,比如让它在后台持续重构代码、跑测试、生成文档,那建议把接入方式换成更省心的方案。
TaoToken 这边有专门的 Coding Plan,针对长期编码和 Agent 场景做了优化,地址是 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite 。它的好处是配额和稳定性更适合长时间挂机跑任务,不会因为频繁调用被限流。配置方式跟前面一样,改ANTHROPIC_BASE_URL和密钥就行。
另外,如果你用的是 Claude Code 的 Anthropic 原生接入方式,可以参考 https://taotoken.net/claude-code-anthropic?utm_source=taotoken_aicg_blog_end&utm_content=claudecodeanthropic&utm_campaign=rewrite 里的说明,它把 Claude Code 的配置细节讲得比较清楚。想先在网页上试试模型对话效果,可以打开 https://taotoken.net/model-chat?utm_source=taotoken_aicg_blog_end&utm_content=model-chat&utm_campaign=rewrite ,不用装任何东西就能验证密钥和模型是否正常。
最后说个我踩过的坑:手机端 Termius 的免费版对同时连接的会话数有限制,如果你要同时 attach 多个 tmux 会话(比如一个跑 Claude Code,一个跑日志监控),建议在同一个 SSH 连接里用 tmux 的多窗口切换,Ctrl+b然后按c新建窗口,Ctrl+b按数字键切换,比开多个 SSH 连接省资源也更稳。返乡路上网络抖动是常态,tmux 的多窗口 + 断线重连,基本能让你在高铁过隧道的时候也不丢进度。