SSD Nodes Learn 8GB 内存 — 每年 $66
指南 Matt Connor作者: Matt Connor · 更新于 2026-08-01

如何在手机上使用 Claude Code

Claude Code 运行在 VPS 的 tmux 会话中,手机仅通过 SSH 连接。本文介绍 SSH 密钥、应对移动网络波动的 mosh、tmux 重连,以及手机终端键盘设置。

在手机上使用 Claude Code:其实际工作方式

在手机上使用 Claude Code 并不是使用移动应用。Claude Code 运行在 VPS(虚拟专用服务器)上,位于一个持续保持打开状态的 tmux 会话中。只要您仍在查看会话,手机就会通过 SSH(安全 Shell)连接到该会话。关闭应用后,代理仍会继续工作,因为该进程从未运行在手机上。

这种分离就是整个设计的核心。手机操作系统会在您切换离开应用几秒后暂停该应用,因此在手机上启动的长时间任务会停止。您从 wifi 切换到移动数据时,手机还会获得新的网络地址。这两个问题在进程运行于服务器、手机只负责显示界面后都会消失。

服务器上需要四项内容:用于保持会话的 tmux、用于登录的 SSH 密钥、用于应对网络变化的 mosh,以及 Claude Code 本身。手机端只需要一个带有可访问按键行的终端应用。

VPS 所需配置

对于 SSH 和 tmux 部分,一台小型 Ubuntu 24.04 服务器就足够了。Claude Code 需要更高的配置。截至 2026 年 7 月,官方要求是在 x64 或 ARM64 处理器上运行 Ubuntu 20.04 或更高版本,并配备至少 4 GB RAM。1 GB 方案可以安装它,但在负载较高时,进程会被内核终止。Claude Code 还需要付费 Claude 账户(Pro、Max、Team 或 Enterprise),或者具有 API 访问权限的 Console 账户,因为免费的 Claude.ai 方案不包含此功能。

使用具有 sudo 权限的普通用户配置服务器,不要使用 root。如果服务器是新建的,请先完成新建 VPS 后的前 10 分钟,因为完成用户和防火墙配置后,再进行本指南后面的 SSH 更改会更简单。

sudo apt update && sudo apt install -y tmux mosh
curl -fsSL https://claude.ai/install.sh | bash
claude --version

安装程序会将二进制文件放在 ~/.local/bin/claude,而 claude --version 会输出类似 2.1.211 (Claude Code) 的行。如果输出 command not found,说明该目录尚未加入你的 PATH:注销后重新登录,然后使用 command -v claude 检查。claude doctor 会输出安装和设置诊断信息,但不会启动会话。

现在先从笔记本电脑登录一次,然后再依赖手机操作。在项目目录中运行 claude,并按照登录提示操作。此流程会要求你在浏览器中打开一个 URL,再将代码带回终端。在手机屏幕上切换两个应用完成这些操作比较慢。使用实体键盘完成一次登录即可,凭据会保留在服务器上。

在 tmux 中启动 Claude Code,避免连接中断终止进程

tmux new -s claude
cd ~/projects/api
claude

Ctrl-b,然后按 d 退出连接。tmux 会显示 [detached (from session claude)],并将控制权交还给 shell。此时可以关闭应用、失去信号,或将手机放入口袋。窗格中的进程仍会继续运行。

tmux ls
tmux attach -t claude

tmux ls 会为每个会话输出一行信息,例如 claude: 1 windows (created Thu Jul 30 09:14:02 2026)tmux attach -t claude 会将您准确带回离开的位置,包括尚未完成的编辑。

这是因为 tmux 会运行自己的服务器进程。您的 shell 和 Claude Code 是该服务器的子进程,而不是 sshd 的子进程。SSH 连接结束时,内核会向附加到该连接的进程发送挂断信号 SIGHUP;tmux 服务器不属于这些进程。如果不使用 tmux,同样会导致连接中断的屏幕锁定也会在工具调用进行到一半时终止 Claude Code。在 VPS 中使用 tmux 运行 Claude Code 更详细地介绍了会话布局。

请在服务器上运行 tmux,不要在手机上运行。在已经附加的会话中输入 tmux 会显示 sessions should be nested with care, unset $TMUX to force;强制执行会导致两个前缀键相互冲突。

每次登录时自动附加

在触摸键盘上输入附加命令很快就会变得繁琐。将以下内容放在服务器上的 ~/.profile 末尾:

if command -v tmux >/dev/null 2>&1 && [ -z "$TMUX" ] && [ -t 1 ]; then
  exec tmux new-session -A -s claude
fi

如果名为 claude 的会话存在,new-session -A -s claude 会附加到该会话;如果不存在,则创建该会话。因此,一个命令即可处理这两种情况。exec 会将登录 shell 替换为 tmux,因此退出 tmux 后连接会关闭,而不是返回一个空的提示符。需要使用普通 shell 时,跳过该文件:ssh you@server -t "bash --noprofile"

将其放在 ~/.profile 中,不要放在 ~/.bashrc 中。~/.bashrc 也会对非交互式会话运行,因此文件传输会中断:scpsftp 会将意外输出读取为协议数据,并因 Received message too long 而失败。~/.profile 仅对登录 shell 运行,而交互式 SSH 会话正是登录 shell。

Ubuntu 也会在 ~/.profile 中将 ~/.local/bin 添加到 PATH。如果登录后立即运行 claude 正常,但 tmux 内的 shell 显示 command not found,原因就是执行顺序。因此,应像上面所述从登录 shell 启动 tmux,而不要从跳过 profile 的脚本启动。

这两个应用都支持 SSH 和 mosh,也都会在应用中存储密钥。区别在于界面。

Blink Shell 以命令为主。在提示符处输入 ssh you@servermosh you@server,语法与桌面终端相同。输入 config 可打开设置,Keys 部分可为您创建密钥对。

Termius 以表单为主。您先填写主机条目,然后在主机详细信息中将该主机的连接方式从 SSH 切换为 Mosh。Termius 内置 mosh 实现,并支持 mosh 1.3.0 及更高版本,因此服务器仍需安装 mosh 软件包。

无论使用哪种应用,都应在应用内生成密钥,绝不要将现有私钥复制到手机上。应用会显示公钥部分。您只需将这单独一行添加到服务器上的 ~/.ssh/authorized_keys每台设备使用独立的 SSH 密钥以及如何撤销密钥介绍了命名和撤销步骤。对于手机,这比笔记本电脑更重要。

启用终端应用自身的生物识别或密码锁定功能。否则,只要屏幕保持唤醒状态,未锁定的手机就会让他人持续访问您服务器上的 shell。

Android:Termux

pkg upgrade
pkg install openssh mosh
ssh-keygen -t ed25519 -C "pixel"
cat ~/.ssh/id_ed25519.pub

Termux 在自己的软件源中提供 OpenSSH 和 mosh,因此 sshssh-keygenmosh 的行为与桌面系统一致。将打印出的公钥行添加到服务器上的 ~/.ssh/authorized_keys,然后使用 mosh you@server 连接。

Android 屏幕键盘没有 Esc 键和 Ctrl 键,而 Claude Code 需要这两个键。Termux 可以显示自己的按键栏。在 ~/.termux/termux.properties 中添加一行:

extra-keys = [['ESC','|','/','HOME','UP','END','PGUP'],['TAB','CTRL','ALT','LEFT','DOWN','RIGHT','PGDN']]

然后运行 termux-reload-settings,按键栏就会显示在键盘上方。相同的重新加载操作也会加载放置在 ~/.termux/font.ttf 的等宽 TrueType 字体。

Android 可能会在 Termux 位于后台时停止它。在这里,这只会导致您重新连接。会话和代理都在服务器上。

离开 wifi 后终端为什么会冻结,mosh 能解决什么问题?

SSH 连接使用 TCP(传输控制协议),TCP 连接由两端的地址和端口共同标识。离开 wifi 覆盖范围后,手机会从移动网络获取新地址,因此旧连接在两端都找不到对应项。系统不会发送任何提示。TCP 放弃连接前,终端只会停止响应,之后 ssh 才会输出 client_loop: send disconnect: Broken pipe。要立即终止冻结的会话,请依次按 Enter~.

mosh(移动 shell)消除了这种故障模式。它只使用一次 SSH 登录并启动 mosh-server 进程,读取服务器选择的 UDP(用户数据报协议)端口,然后关闭 SSH 连接。之后,两端使用共享会话密钥验证 UDP 数据报,因此会话由该密钥而不是地址标识。地址改变后,会话可以继续。mosh 还会在本地回显您的输入,并在服务器状态不一致时重新绘制屏幕,因此在速度较慢的移动网络上仍可使用。

mosh 使用 60000 到 61000 之间的 UDP 端口,因此请开放此范围:

sudo ufw allow 60000:61000/udp
sudo ufw status

使用 ufw 开放端口介绍了防火墙配置的其余部分。如果您的服务商在控制面板中提供独立的网络防火墙,也请在那里添加相同的端口范围,因为 ufw 规则无法影响位于服务器前面的过滤器。

mosh 常见的故障有两种。登录成功后卡住并显示 Nothing received from server on UDP port 60001.,表示手机与服务器之间的某处阻止了该 UDP 端口范围。连接报告未找到 mosh-server,表示服务器上缺少该软件包,或者登录 PATH 中没有该命令。请安装它,或使用 mosh --server=/usr/bin/mosh-server you@server 直接指定其路径。

当登录区域设置不是 UTF-8 时,mosh 也会拒绝运行,并显示:mosh-server needs a UTF-8 native locale to run. 请在服务器上修复区域设置,不要在手机上修复。

locale
sudo locale-gen en_US.UTF-8
sudo update-locale LANG=en_US.UTF-8

mosh 有两项功能限制。其 README 说明,mosh 不支持 X 转发或 SSH 的非交互式用法,包括端口转发。因此,要预览 Claude Code 刚启动的 Web 应用,仍需使用普通的 ssh -L 8080:127.0.0.1:8080 you@server。mosh 还只同步可见屏幕,因此不提供自己的回滚缓冲区。这里不会受到第二项限制影响,因为 tmux 会保留回滚内容:先执行 Ctrl-b,然后 [ 进入复制模式;拖动鼠标或使用箭头键滚动;执行 q 退出。

让手机屏幕便于使用

服务器上的 ~/.tmux.conf 中有4行配置完成了大部分工作:

set -g mouse on
set -g status-position top
set -g default-terminal "tmux-256color"
set -g history-limit 20000

mouse on 将触摸拖动转换为滚动,将点击转换为窗格或窗口选择,从而替代大多数难以输入的前缀键。status-position top 将 tmux 状态栏移出底部边缘,因为屏幕键盘及其建议栏会遮住它。default-terminal 很重要,因为否则 tmux 会向 Claude Code 声明使用的是 screen 终端,颜色和框线字符的显示效果会变差。如果 tmux 随后因 missing or unsuitable terminal: tmux-256color 而拒绝启动,说明缺少 terminfo 条目:sudo apt install ncurses-term

掌握4个按键后,其余操作就很方便了。

  • Esc 会中断 Claude 当前的响应,同时保留已完成的工作,因此应将它放在拇指最容易触及的位置。
  • Ctrl+C 也会中断正在运行的操作。在空闲提示符处,第一次按下会清除输入,第二次按下会退出 Claude Code,因此它的作用更强硬。
  • 连按两次 Esc 会清除草稿提示;在空提示符处,它会改为打开回退菜单。
  • 对于多行提示,请输入 \,然后按 Enter。这种方式适用于所有终端。Shift+Enter 仅在少数桌面终端中原生支持,移动客户端不在其中。

避免使用拆分窗格。手机竖屏时宽度约为40列,因此垂直拆分后每个窗格只有20列,每个差异内容都会换行成难以阅读的噪声。请改用 tmux 窗口:Ctrl-b c 创建窗口,Ctrl-b n 移动到下一个窗口。需要正确阅读差异内容时,请将手机横过来。

小屏幕上的长时间会话主要是上下文管理问题,因此在尝试从火车上完成一整天的工作之前,建议先阅读管理 Claude Code 上下文窗口

加固:仅使用密钥,不使用密码

现在,手机中保存着一把密钥,可以访问用于编辑代码和运行命令的计算机。关闭密码身份验证。使用 drop-in 文件比直接编辑 sshd_config 更安全,因为 Ubuntu 的 sshd_config 顶部包含 /etc/ssh/sshd_config.d/*.conf,系统会使用某项设置找到的第一个值。

sudo tee /etc/ssh/sshd_config.d/99-phone.conf >/dev/null <<'EOF'
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
PermitRootLogin no
EOF
sudo sshd -t && sudo systemctl reload ssh

sshd -t 会解析配置。配置有效时不输出任何内容。跳过此步骤后,任何一个拼写错误都会导致 sshd 重新加载失败。保留当前工作会话,并在关闭任何连接前通过第二个连接进行测试。因为密钥错误会立即导致 Permission denied (publickey).,而关闭密码后没有备用登录方式。此时只能使用服务提供商的控制台进行恢复。

为每台设备使用单独的密钥。手机丢失后,只需从 ~/.ssh/authorized_keys 删除一行,笔记本电脑仍可继续工作。使用共享密钥则需要在你拥有的每台设备上更换密钥。

如果要在 Ubuntu 24.04 上将 SSH 移到其他端口,请注意监听器属于 ssh.socket,因此单独添加 Port 行不会产生任何变化。运行 sudo systemctl edit ssh.socket,使用空的 ListenStream= 清除默认值,然后在下一行设置端口。加固 VPS 上的 SSH 介绍了这一点以及其他攻击面。

用于 SSH 的 fail2ban 在关闭密码后增加的安全性很小,因为系统完全不会接受猜测出的密码。它能做的是减少日志噪声,从而更容易发现真实的登录尝试。

更强的方案是让 SSH 不暴露在公共互联网中。将服务器置于自行托管的 WireGuard VPN后,通过手机按需建立隧道,并仅在隧道上为 sshd 设置 ListenAddress。mosh 可以通过隧道工作,因为两端都使用 UDP。需要注意的是,隧道会增加数据包开销。因此,如果大文件传输停滞,请在手机的 WireGuard 配置中降低 MTU(最大传输单元)。

最后说明这种工作方式的一个问题。使用手机时,你需要在每次显示几行差异内容的屏幕上批准权限提示。这正是应保留安全限制而不是关闭它们的原因。在 VPS 上安全运行 Claude Code介绍了在主要入口是触摸屏之前,值得设置的用户和目录限制。

重新连接后发现异常时

tmux attach 输出 no server running on /tmp/tmux-1000/default 表示 tmux 服务器已消失,这几乎总是意味着机器已重启。使用 uptime 检查。自动安全更新中的内核更新会重启主机,而重启后的主机没有 tmux 会话。因此,应将任何 Claude Code 运行都视为可以重新启动的任务。

can't find session: claude 的情况不同。tmux 服务器正在运行,但不存在该名称。tmux ls 会显示实际存在的会话。

如果连接后发现原本运行 Claude Code 的位置变成了普通 shell 提示符,说明进程已结束,但会话仍然存在。查看 dmesg -T | tail,查找类似 Out of memory: Killed process 4821 (claude) 的行。这是内存低于 4 GB 要求的主机在执行大型编辑时的表现。如果没有该行,说明 Claude Code 自行退出了;提示符上方的 shell 回滚内容会显示退出原因。

如果窗口重新显示得很小,周围有未使用的空间,说明有两个客户端以不同尺寸连接,因为 tmux 会将窗口调整为适合所有已连接客户端的最小尺寸。您的笔记本仍以 200 列宽保持会话,而手机要求宽度为 40 列。连接时分离其他客户端:tmux attach -d -t claude

FAQ

我可以直接在手机上运行 Claude Code,而不是在 VPS 上运行吗?

不可以。截至 July 2026,支持的平台包括 macOS、Windows、Ubuntu 20.04 或更高版本、Debian 10 或更高版本,以及 Alpine 3.19 或更高版本,并且需要 4 GB 或更多 RAM。Android 和 iOS 不在支持列表中。手机还会让应用进入休眠状态,并且持续改变网络地址,这些情况都无法满足长时间运行的代理任务。请在服务器上运行 Claude Code,并将手机作为显示设备使用。

如果我关闭应用或失去信号,会话还会保留吗?

会,而且有两个独立组件负责此功能。tmux 会让进程继续在服务器上运行,因此连接结束时任务不会终止。mosh 会在网络地址变化后保持连接,因此从 wifi 切换到移动数据甚至不需要重新连接。使用普通 SSH 且未使用 tmux 时,连接断开会发送 SIGHUP,Claude Code 会在任务中途停止。

为什么 mosh 连接成功后却什么也不显示?

如果登录成功后停滞,并显示 Nothing received from server on UDP port 60001.,说明 UDP 60000 到 61000 端口未开放。请在 ufw 中添加该端口范围,并在服务提供商的网络防火墙中再次添加。大多数控制面板中的网络防火墙是独立的控制项。如果 mosh 报告找不到 mosh-server,说明服务器缺少相应软件包:sudo apt install mosh

没有 Esc 键时,如何通过键盘中断 Claude Code?

请添加一行按键。Termux 可使用 extra-keys~/.termux/termux.properties 中配置按键行;Termius 和 Blink 都提供了可在设置中编辑的按键行。Esc 会中断正在运行的响应,同时保留已完成的工作。Ctrl+C 也可以中断任务,但在空闲提示符下连续按两次会退出 Claude Code,因此应优先使用 Esc

将 SSH 开放到互联网是否足够安全?

关闭密码身份验证后,唯一可能成功的凭据是不会离开您设备的密钥。对于可以重建的机器而言,这是合理的风险。请为每台设备使用独立密钥,这样手机丢失时,只需在 authorized_keys 中删除一行。如果您不想在公共端口上接受连接,可以将服务器置于 WireGuard 后面,并让 sshd 监听隧道地址。