
手机远程控制Mac上的Claude Code开发完整实战指南你有没有想过在地铁上、咖啡馆里甚至躺在床上都能用手机写代码不是那种远程桌面的卡顿体验而是原生的终端操作流畅、稳定、随时随地。这篇文章教你用手机SSH连接Mac在tmux会话里跑Claude Code CLI实现真正的移动开发。一、方案架构为什么是这套组合核心三件套组件作用为什么选它Tailscale内网穿透无需公网IP点对点直连延迟低SSH tmux远程终端 会话保持断网不丢进度多窗口并行Claude Code CLIAI编程助手原生终端体验直接改代码方案优势无需公网IPTailscale构建虚拟局域网Mac在内网也能连断线不丢会话tmux保护你的Claude Code会话网络波动不受影响手机原生体验Termius提供真正的终端不是远程桌面的镜像安全可控Tailscale的ACL权限控制SSH密钥认证二、第一步Tailscale组网安全配置2.1 安装TailscaleMac端# 方式一Homebrew安装brewinstalltailscale# 方式二官网下载pkg安装包# https://tailscale.com/download手机端iOSApp Store搜索TailscaleAndroidGoogle Play或官网下载APK2.2 注册与登录打开Tailscale选择登录方式Google/GitHub/Microsoft/邮箱同一账号在Mac和手机上都登录设备会自动出现在同一网络中2.3 安全配置关键步骤Tailscale默认配置已经比较安全但建议进一步加固关闭高风险功能在Mac的Tailscale设置中关闭Use exit node不要让其他设备通过你的Mac上网关闭Route local network不要暴露本地网络如果不使用子网路由确保Subnet router未启用开启MFA两步验证登录Tailscale管理后台https://login.tailscale.com进入Settings → Security启用Two-factor authentication配置最小权限ACL在管理后台的ACL编辑器中{acls:[{action:accept,src:[tag:mobile],dst:[tag:mac:22]}],tagOwners:{tag:mobile:[autogroup:member],tag:mac:[你的邮箱]}}这段配置的含义只允许带tag:mobile标签的设备连接带tag:mac标签设备的22端口SSH端口其他端口全部拒绝定期清理设备在管理后台的Machines列表中移除不再使用的设备检查是否有异常连接2.4 验证组网成功在Mac终端查看Tailscale状态tailscale status输出示例100.64.0.1 macbook-pro your-email macOS - 100.64.0.2 iphone-15 your-email iOS -看到两个设备都在列表中且IP地址在同一网段100.64.x.x说明组网成功。三、第二步Mac开启SSH服务3.1 通过系统设置开启推荐macOS Ventura及以上点击屏幕左上角苹果图标 →系统设置左侧边栏 →通用→共享在服务列表中找到远程登录将开关切换为开启右侧显示已允许访问可选择所有用户或指定用户macOS Monterey及以下点击苹果图标 →系统偏好设置点击共享图标勾选远程登录右侧设置允许访问的用户3.2 通过终端命令开启如果你更喜欢命令行# 检查SSH当前状态sudosystemsetup-getremotelogin# 开启SSHsudosystemsetup-setremoteloginon# 再次验证sudosystemsetup-getremotelogin# 输出: Remote Login: On3.3 配置防火墙如果Mac开启了防火墙需确保SSH端口放行系统设置 → 隐私与安全性 → 防火墙 → 选项确保列表中有远程登录SSH“状态为允许传入连接”。如果没有点击号添加。3.4 验证SSH服务# 检查sshd进程是否运行psaux|grepsshd# 检查22端口是否监听lsof-i:22# 本地自测SSH连接sshlocalhost# 首次连接会提示确认指纹输入yes3.5 获取连接信息在远程登录设置页面会显示要从此电脑登录此Mac请输入 ssh 用户名100.64.0.1记下这个IP地址Tailscale分配的虚拟IP和用户名。四、第三步tmux会话管理4.1 安装tmux# Homebrew安装brewinstalltmux# 验证安装tmux-V4.2 核心概念tmux有三个层级层级说明类比Session会话顶层的独立环境一个完整的终端窗口Window窗口会话内的标签页浏览器的TabPane窗格窗口内的分割区域分屏后的每一块4.3 基础操作创建命名会话推荐# 创建一个叫claude-code的会话tmux new-sclaude-code所有tmux快捷键都要先按前缀键Ctrl b常用快捷键快捷键功能Ctrlb d分离会话后台运行Ctrlb c新建窗口Ctrlb 0-9切换到第0-9个窗口Ctrlb %左右分屏Ctrlb 上下分屏Ctrlb 方向键切换窗格Ctrlb x关闭当前窗格Ctrlb [进入滚动模式按q退出会话管理命令# 查看所有会话tmuxls# 重新连接到会话tmux attach-tclaude-code# 简写tmux a-tclaude-code# 只有一个会话时直接连接tmux a# 结束会话tmux kill-session-tclaude-code4.4 为什么tmux是必需的场景一网络断开没有tmuxSSH断开 → Claude Code进程被杀 → 所有工作丢失有tmuxSSH断开 → tmux会话仍在后台运行 → 重连后tmux a恢复现场场景二切换网络从家里WiFi切换到移动数据Termius重新连接tmux a回到之前的Claude Code会话代码还在场景三多任务并行在一个tmux会话中窗口0跑Claude Code写代码窗口1跑pytest测试窗口2查看日志文件手机小屏幕用窗口切换比分屏更实用。五、第四步手机端Termius配置5.1 安装TermiusiOSApp Store搜索TermiusAndroidGoogle Play或官网下载Termius免费版已足够使用付费版提供云同步功能。5.2 新建主机连接打开Termius点击右下角“号 → 选择New Host”填写连接信息字段填写内容Alias别名My MacBook Pro自定义名称Hostname/IP100.64.0.1Tailscale分配的IPPort22默认SSH端口Username你的Mac用户名Password你的Mac登录密码点击右上角✓保存。5.3 首次连接在Termius主机列表中点击刚创建的主机首次连接会提示未知主机指纹点击Continue确认输入Mac登录密码连接成功后看到Mac的终端提示符测试连接# 查看系统信息uname-a# 查看当前目录pwd# 测试Tailscale连接tailscale status5.4 进阶SSH密钥认证可选但推荐密码认证每次都要输入密码密钥认证更安全更方便。在Mac上生成密钥对# 生成ED25519密钥推荐ssh-keygen-ted25519-Cyour-emailexample.com# 一路回车使用默认设置# 密钥保存在 ~/.ssh/id_ed25519私钥和 ~/.ssh/id_ed25519.pub公钥将公钥添加到授权列表cat~/.ssh/id_ed25519.pub~/.ssh/authorized_keys# 设置正确权限chmod600~/.ssh/authorized_keys导出私钥到手机# 在Mac上查看私钥内容cat~/.ssh/id_ed25519复制输出的全部内容包括-----BEGIN OPENSSH PRIVATE KEY-----和-----END OPENSSH PRIVATE KEY-----。在Termius中导入密钥Termius → 右下角… → Keychain点击Add KeyLabel填写MacBook KeyPrivate Key粘贴刚才复制的内容保存修改主机连接使用密钥编辑之前创建的主机Password字段清空点击Keys选择刚导入的密钥保存现在连接无需输入密码。5.5 Termius实用技巧中文界面设置Termius默认英文可切换中文右下角Settings齿轮图标General → Language → 选择中文快速命令片段常用命令可以保存为SnippetTermius → Snippets → “”添加常用命令如tmux a -t claude-code连接后快速执行六、第五步Claude Code CLI安装与验证6.1 安装Node.jsClaude Code CLI基于Node.js运行需先安装# Homebrew安装brewinstallnode# 验证安装node-vnpm-vNode.js版本需18.0以上。6.2 安装Claude Code CLI# npm全局安装npminstall-ganthropic-ai/claude-code# 验证安装claude--version6.3 配置API KeyClaude Code需要Anthropic API Key才能使用。获取API Key访问https://console.anthropic.com注册/登录账号API Keys → Create Key复制生成的Key以sk-ant-开头配置环境变量# 临时配置当前终端会话有效exportANTHROPIC_API_KEYsk-ant-your-key-here# 永久配置写入shell配置文件# 如果使用zshmacOS默认echoexport ANTHROPIC_API_KEYsk-ant-your-key-here~/.zshrcsource~/.zshrc# 如果使用bashechoexport ANTHROPIC_API_KEYsk-ant-your-key-here~/.bash_profilesource~/.bash_profile国内用户中转配置如果无法直接访问Anthropic API可配置中转地址exportANTHROPIC_BASE_URLhttps://你的中转地址exportANTHROPIC_API_KEY中转平台提供的Key6.4 在tmux会话中启动Claude Code完整流程# 1. SSH连接到Mac后创建tmux会话tmux new-sclaude-code# 2. 进入项目目录cd~/projects/my-project# 3. 启动Claude Codeclaude# 4. 首次启动会提示# - 选择主题推荐默认# - 确认安全须知# - 信任当前目录# 按Enter使用默认选项即可# 5. 按 Ctrlb d 分离会话Claude Code继续后台运行# 6. 断开SSH连接也没关系# 7. 下次重新连接后恢复tmux a-tclaude-code6.5 Claude Code基础使用Claude Code是交互式AI编程助手直接用自然语言对话你: 帮我写一个Python脚本读取CSV文件并计算每列的平均值 Claude Code: 我来创建这个脚本... [自动创建文件并写入代码] 你: 能加上错误处理吗 Claude Code: 好的我来添加try-except... [修改代码]常用命令/help查看帮助/clear清除对话历史/compact压缩对话上下文CtrlC中断当前操作七、完整工作流演示场景在地铁上修复一个Bug早上出门前# 在Mac上cd~/projects/my-app tmux new-smy-app claude# 让Claude Code理解项目结构按Ctrlb d分离会话让Mac保持开机。地铁上手机操作打开Termius点击My MacBook Pro连接执行tmux a -t my-app看到之前的Claude Code会话继续对话你: 我发现用户登录后偶尔会报500错误帮我排查 Claude Code: 我来检查登录相关的代码... [读取auth.py] 问题可能出在数据库连接超时处理上我建议...修复完成后按Ctrlb d分离断开SSH到公司后在公司的电脑上ssh你的用户名100.64.0.1 tmux a-tmy-app# 继续之前的会话无缝衔接。八、常见问题与解决方案问题1Tailscale连接不上症状Termius提示Connection refused或Timeout排查步骤# 在Mac上检查Tailscale状态tailscale status# 如果显示stoppedtailscale up# 检查防火墙是否阻止# 系统设置 → 隐私与安全性 → 防火墙 → 确保SSH在允许列表检查ACL权限登录Tailscale管理后台确认ACL没有阻止手机到Mac的22端口。问题2SSH连接被拒绝症状ssh: connect to host 100.64.0.1 port 22: Connection refused解决方案# 检查SSH服务状态sudosystemsetup-getremotelogin# 如果显示Off开启它sudosystemsetup-setremoteloginon# 检查sshd进程psaux|grepsshd# 如果没有sshd进程尝试重启sudolaunchctl unload /System/Library/LaunchDaemons/ssh.plistsudolaunchctl load-w/System/Library/LaunchDaemons/ssh.plist问题3tmux会话丢失症状tmux ls提示no server running on /tmp/tmux-xxx原因Mac重启了或tmux进程被杀。预防措施tmux会话不持久化Mac重启会丢失。可以考虑使用脚本自动恢复关键会话重要工作记得及时提交Git使用launchd在开机后自动启动tmux问题4手机输入命令太慢解决方案方法一使用Snippet在Termius中保存常用命令片段tmux a -t claude-codegit statusnpm test一键执行无需手打。方法二配置tmux快捷键创建~/.tmux.conf# 改变前缀键为Ctrla手机上更容易按set-gprefix C-a unbind C-bbindC-a send-prefix# 更直观的窗口切换bind-nM-Left select-window-t-1bind-nM-Right select-window-t1方法三外接蓝牙键盘如果经常移动办公蓝牙键盘能大幅提升效率。问题5Claude Code响应慢可能原因网络延迟高Tailscale中继模式API服务器响应慢项目文件过多解决方案# 检查Tailscale是否直连tailscale status# 如果显示relay说明走了中继服务器# 优化在同一地域的设备更易直连# 如果直连延迟通常50ms使用/compact定期压缩对话上下文减少每次请求的数据量。九、安全最佳实践9.1 最小权限原则Tailscale ACL只开放必要端口{acls:[{action:accept,src:[tag:mobile],dst:[tag:mac:22]}]}SSH用户限制在远程登录设置中只允许特定用户SSH登录不要选所有用户。9.2 密钥优于密码密码可能被暴力破解ED25519密钥更安全。禁用密码登录编辑/etc/ssh/sshd_configPasswordAuthentication no PubkeyAuthentication yes重启SSH服务sudolaunchctl unload /System/Library/LaunchDaemons/ssh.plistsudolaunchctl load-w/System/Library/LaunchDaemons/ssh.plist9.3 定期审计检查登录日志# 查看最近的SSH登录last|head-20# 查看失败的登录尝试lastb|head-20检查Tailscale连接日志在管理后台的Logs页面查看所有连接记录。9.4 紧急情况处理发现异常访问立即在Tailscale管理后台移除可疑设备在Mac上关闭SSHsudo systemsetup -setremotelogin off更改密码和密钥远程关闭SSH如果手机被盗通过Tailscale管理后台的ACL立即阻止所有连接。十、进阶玩法10.1 多设备协同场景手机写代码iPad看日志# Mac上创建两个tmux会话tmux new-scoding# 会话1跑Claude Codetmux new-slogs# 会话2tail -f logs/app.log# 手机连接coding会话tmux a-tcoding# iPad连接logs会话tmux a-tlogs两个设备同时操作互不干扰。10.2 自动化脚本创建~/scripts/start-remote-dev.sh#!/bin/bashSESSION_NAMEclaude-code# 检查会话是否存在tmux has-session-t$SESSION_NAME2/dev/nullif[$?!0];then# 创建新会话tmux new-session-s$SESSION_NAME-d# 进入项目目录tmux send-keys-t$SESSION_NAMEcd ~/projects/my-projectC-m# 启动Claude Codetmux send-keys-t$SESSION_NAMEclaudeC-mfiecho会话 $SESSION_NAME 已就绪echo手机SSH连接后执行: tmux a -t$SESSION_NAMEMac开机后自动运行chmodx ~/scripts/start-remote-dev.sh在系统设置 → 通用 → 登录项中添加此脚本。10.3 端口转发如果需要访问Mac上的本地服务如localhost:3000SSH端口转发# 在手机Termius中连接时添加端口转发# 编辑主机 → Port Forwarding → Add# Local Port: 3000# Remote Host: localhost# Remote Port: 3000连接后手机浏览器访问localhost:3000就是Mac上的服务。十一、总结这套方案的核心价值随时随地只要有网络就能连接Mac开发稳定可靠tmux保护会话网络波动不影响安全可控Tailscale的ACL SSH密钥双重保护原生体验Termius提供真正的终端不是远程桌面适用场景通勤路上处理紧急Bug外出时需要查看服务器日志多台设备协同工作没有公网IP的内网环境不适用场景需要图形界面操作用VNC或Parsec大文件传输用Syncthing或scp高频输入外接蓝牙键盘更好关键要点Tailscale的安全配置是基础tmux是会话保持的核心Termius让手机变成真正的终端Claude Code在tmux中才能断线不丢进度现在试试从手机连接你的Mac开始第一次移动开发体验吧。附录命令速查表Tailscaletailscale status# 查看连接状态tailscale up# 启动连接tailscale down# 断开连接tailscaleip# 查看虚拟IPSSHsshuser100.64.0.1# 连接远程主机ssh-keygen-ted25519# 生成密钥对ssh-copy-id userhost# 复制公钥到远程tmuxtmux new-sname# 创建命名会话tmuxls# 列出所有会话tmux a-tname# 连接到会话tmux kill-session-tname# 结束会话tmux快捷键先按Ctrlbd 分离会话 c 新建窗口 0-9 切换窗口 % 左右分屏 上下分屏 x 关闭窗格 [ 滚动模式q退出Claude Codeclaude# 启动交互界面claude--version# 查看版本/help# 查看帮助/clear# 清除对话/compact# 压缩上下文