
Claude Code这名字最近在圈子里越来越响但大多数人还在讨论它怎么装、怎么配、怎么在终端里聊天写代码。我真正想聊的是它的远程控制能力——不是向日葵那种远程桌面也不是在网页上点一点的Web IDE而是把本地开发会话搬到另一台设备上接着之前的对话继续干活。这个场景听起来很基础实际操作起来却有不少门道。我自己的情况是这样的主力开发机是一台放在家里的Linux工作站白天在公司用笔记本通过SSH连上去写代码。Claude Code跑在工作站上而我手里的终端窗口经常在笔记本、公司台式机、甚至手机上的Termius之间来回切换。每次切换最烦的不是重新连SSH而是Claude Code那个已经聊了几十轮、带着完整上下文的会话换台设备就丢了得重新交代需求那种挫败感谁经历谁知道。后来我把跨设备接续本地开发会话这套流程彻底捋顺了现在不管人在哪里、手里拿的是哪台设备随时都能无缝接上白天的开发现场。这篇文章我就把整个技术实现和应用场景拆开讲清楚从底层原理到实操命令再到我踩过的坑全部记录下来。1. 项目缘起为什么需要跨设备接管本地开发会话1.1 从一次“断线”经历说起的真实痛点事情得从一次加班的晚上说起。当时我正用Claude Code在一个项目里排查一段诡异的异步任务丢失问题上下文已经积累了大概40多轮对话Claude Code记住了我项目的目录结构、失败日志的关键特征、甚至我习惯的代码风格。快到下班时我合上笔记本想着回家再继续。到家打开电脑SSH连上工作站启动claude发现会话已经没了。我只能从头开始又花了20多分钟重新描述问题背景粘贴日志Claude Code又从头开始看代码——那种感觉就像跟一个失忆的同事重新对接工作效率低到让人抓狂。那次之后我开始认真琢磨这件事Claude Code本质上是跑在终端里的一个交互式进程它的“记忆”全在本地会话里。只要这个进程不被杀掉、会话文件不丢理论上我完全可以从任意设备重新“接上”它。问题的关键在于怎么管理这个常驻进程以及怎么让不同设备都能轻松连进去。1.2 这里的“远程控制”到底指什么先说清楚概念避免混淆。Claude Code的远程控制不是图形界面上的“远控”也不是通过浏览器访问一个内网穿透页面。它是一个纯终端工具所以它的远程控制本质上是终端会话的接管。具体来说就是三件事让Claude Code进程在远端开发机上常驻运行不随某个终端窗口关闭而退出让任意设备笔记本、台式机、平板通过SSH连到开发机后能重新附着attach到这个会话上让会话的上下文、历史记录、当前工作目录保持一致真正做到“换设备不换进度”。这个思路其实和服务器运维里的tmux、screen是同一个套路只不过Claude Code有人工智能会话这个额外的状态层所以在技术实现上要处理得更细心。1.3 这套方案解决的是什么人的什么需求我认为主要适合三类人。第一类是我这种多设备混用的人。公司一台笔记本、家里一台台式机、偶尔还拿iPad应急代码全在服务器上希望Claude Code的会话也能跟代码一样随处可接。第二类是做长时间AI结对编程任务的人。比如重构一个模块、排查一个棘手的线上Bug这类任务往往需要跑很长的会话中间可能隔几个小时、甚至隔一天。如果每次重新打开都要从头聊起AI结对的价值大打折扣。第三类是给团队成员共享同一台开发环境的人。几个人共用一台高配工作站希望所有对话记录和上下文都留在服务器上谁接入都能看到之前的进展协同起来会顺畅很多。2. 技术底座Claude Code会话机制与远程接管的底层逻辑2.1 Claude Code本质是一个本地交互式进程要理解远程控制先得明白Claude Code本身是怎么工作的。它不像Web应用那样有一个“云端服务端”Claude Code只是把你本地的命令行工具作为一个客户端通过API去调用远端的大模型服务。真正干活的是你本地的文件系统、执行命令的本机环境、以及那一大段对话上下文。换句话说Claude Code的“灵魂”在你本地的进程里。模型推理发生在对方的服务器上但对话历史、状态管理、工具调用记录都保存在本地。这就引出一个关键结论只要本地进程的会话文件还在理论上来任何地方都能恢复。我自己在实践中的体会是理解这一点后整个远程方案就豁然开朗了。我只需要操心一件事怎么让进程常驻怎么安全地连上来。2.2 会话持久化与恢复机制Claude Code的会话并不是一个看不见的抽象概念它的历史记录会持久化到本地。正常使用过程中它会自动管理会话文件命令行里也有对应的会话恢复能力。我常用的两条命令是# 继续最近一次的会话 claude --continue # 列出可恢复的会话 claude --resume--continue这个参数非常实用如果你只在一个项目里干活它直接帮你把最近一次对话捞回来。--resume则会弹出一个会话列表像翻聊天记录一样可以选一个特定时间的上下文接着聊。这里有一个很关键的细节会话恢复依赖的是你接入时的工作目录。Claude Code会把会话跟项目目录绑定在一起如果你在/home/user/project-a下面start了一个会话切换到/home/user/project-b之后再执行claude --continue它恢复的其实是project-b里的最近会话而不是全局最近的会话。所以在跨设备接续的时候第一步永远是先cd到正确的工作目录再做会话恢复。这个顺序搞反了很容易出现“为什么我看到的不是刚才那个上下文”的困惑。2.3 远程接管的三种技术路线对比有了底子远程接管就清晰了。我试下来可行方案大概分三种各有利弊。方案实现方式优点缺点适合场景A. SSH tmux常驻远端开发机用tmux跑Claude Code本地SSH进去attach实现最简单、零额外服务、稳定需要终端环境手机等移动设备操作稍弱大多数开发者主力推荐B. 远程开发容器 Web终端开发机跑code-server或类似工具浏览器里开终端跑Claude Code浏览器随处可用文件编辑和AI会话一体化多一层服务要维护资源占用更高想顺便解决文件编辑需求的人C. CLI内建远程/代理网关使用支持将CLI代理到远端能力的工具链更接近“官方”体验支持API转发配置较复杂依赖社区工具稳定性有自定义网络能力的高级用户我自己首选方案A。它足够透明——Claude Code跑在服务器上本地的终端只是一个显示器任何有SSH客户端的设备都能用不需要额外装东西。方案B我也不排斥特别是当我还想在浏览器里改代码时。方案C就得看具体工具维护得怎么样了我试过一些功能挺惊艳但偶尔遇到升级不兼容的问题就不作为主力了。3. 实操落地跨设备无缝接续开发会话的完整方案3.1 前置准备开发机、终端与密钥配置主力方案是SSH加tmux所以前置条件很明确。第一步准备一台开发机。Linux工作站或云服务器都可以配置不用太高但建议至少有2核4G内存因为Claude Code本身会占用一些资源再加上代码构建和终端进程太小的机器会比较吃力。第二步在本地设备上装好SSH客户端。Windows上我用Windows Terminal自带的OpenSSHmacOS和Linux天生就有手机上我用TermiusiOS和Android都能用。第三步是最容易忽略的配置SSH密钥避免每次连接还要输密码。我习惯把所有本地设备的公钥都追加到开发机的~/.ssh/authorized_keys里# 在本地设备上生成密钥如果没有的话 ssh-keygen -t ed25519 -C your-namedevice-name # 把公钥拷贝到开发机 ssh-copy-id userdev-host这里用ed25519而不是rsa主要是密钥更短、生成更快安全性也够。配置好之后本地连接开发机就是免密的这为后面频繁切换设备省了很多心。3.2 方案ASSH加tmux常驻会话接管tmux是个终端复用器核心能力就是让终端会话脱离当前窗口存活。我把Claude Code放进tmux里跑就实现了“人在不在会话都在”的效果。具体步骤是这样的。第一步在开发机上创建一个专属的tmux会话名字叫claudetmux new -s claude第二步在这个tmux窗口里cd到项目目录启动Claude Codecd /path/to/your/project claude到这里Claude Code已经在开发机上跑起来了但它现在和这个tmux窗口绑定。如果你直接关掉终端SSH断开tmux会话不会死Claude Code也不会死。第三步回到本地设备重新SSH到开发机附着到之前的tmux会话ssh userdev-host tmux attach -t claude就这么简单你立刻回到了Claude Code的会话里所有上下文都在。想离开的时候按一下Ctrlb再按一下ddetach出来SSH断开走人。下次换台设备再重复一遍又是无缝接续。我在实际操作中会起多个tmux会话按项目区分tmux new -s coding-project-a tmux new -s ops-fix这样每个项目有自己的AI会话恢复的时候也清晰不会一锅粥。3.3 方案B远程开发容器加Web终端如果你的场景里不只是跑Claude Code还需要随手改文件、看目录树方案B更顺手。我在一台常开的开发机上跑了一个基于Web的开发环境浏览器打开就是完整IDE界面内置终端能直接跑claude命令。核心思路很简单把整个开发工作区放到一个容器或云开发环境里然后通过Web方式访问。你可以选择自己部署开源方案也可以使用云厂商的开发环境服务这类服务通常自带Web终端。这种方案最大的好处是客户端零安装。我在公司电脑上哪怕是没有SSH工具的临时机器只要能开浏览器就能进入环境打开终端继续Claude Code会话。但代价是复杂度上去了。Web开发环境本身要维护配置不当还会出现端口占用、权限错乱的问题。我的建议是如果你主要用一台固定电脑干活方案A足够如果你经常要在各种临时设备上工作可以给方案B留个位置。3.4 设备切换时的标准操作流程经过这段时间的磨合我总结了一套标准操作流程现在基本形成肌肉记忆了。离开时在Claude Code里把当前进度用一句话总结给AI让它记住关键结论。这个习惯很重要。按Ctrlb然后按ddetach出tmux会话。断开SSH连接。在新设备上接入时SSH连上开发机。cd到对应的项目目录。执行tmux attach -t claude。如果tmux会话不小心被关掉了执行claude --continue恢复。这套流程我实测下来从掏出手机到重新接上会话通常不超过30秒。跨设备无缝接续这件事就这么解决了。4. 配置细节与权限管理不让安全拖后腿4.1 CLI访问权限与授权范围Claude Code要读写文件、执行命令肯定涉及权限问题。把它跑在共享开发机上尤其要注意最小权限原则。我给自己定了几条规矩。第一不要在root账号下跑Claude Code。创建一个专门的开发用户比如dev所有Claude Code操作都在这个用户下进行。这样即使AI误执行了什么危险命令影响范围也被限制在普通用户权限内不会直接伤到系统。第二注意Claude Code自身的授权机制。当你第一次在某个目录里启动它时它会要求你确认是否允许它执行命令、读写文件。我建议认真看一下提示选择“允许并记住”或者只在当前会话允许。不要让Claude Code在所有目录都拥有完全控制权按项目粒度授权是更稳妥的做法。第三如果宿主机的SSH端口暴露在公网建议只允许密钥登录关闭密码登录并且考虑更换默认端口。这是基本的SSH加固三板斧。4.2 API密钥和模型配置的跨设备一致性既然Claude Code跑在开发机上API密钥自然也应该配置在开发机上。这其实是个优点本地设备不需要存任何密钥只要SSH连上开发机就自动获得了AI能力。我一般把API密钥放到开发机的环境变量里在这个文件里配置# ~/.bashrc export ANTHROPIC_API_KEYyour-api-key-here export ANTHROPIC_MODELclaude-sonnet-4-20250514这里有个细节Claude Code也支持通过配置文件设置模型和参数社区里常见的做法是创建一个配置文件把默认模型、温度等参数统一管理。这样不管谁连上来用的是同一套配置不会出现A设备用的模型和B设备不一样的情况。另外社区里很流行把Claude Code接到其他模型上通过环境变量或配置文件切换端点。比如想要用第三方兼容模型时只需要改一下环境变量中的API地址和模型名即可。这个灵活性也是Claude Code作为CLI工具的优势配置文件改起来非常透明。4.3 多用户共享场景下的隔离与安全如果你的开发机有好几个人共用那就不能只考虑“无缝接续”了还得考虑“互不干扰”。tmux天然支持多用户多会话隔离每个人创建自己的tmux会话互不影响。但要注意默认情况下tmux的socket是per-user的用户A的tmux会话用户B默认是看不到也attach不上的。这样反而干净不需要额外配置。如果你希望团队成员能看到同一个会话最简单的方法是共用同一个系统用户然后都去attach同一个tmux会话。但这带来一个问题多个人在同一个会话里同时操作会互相抢占键盘输入体验不太行。我更推荐让每个人各跑各的Claude Code会话有需要同步的时候就共享代码和说明文档。还有一个安全细节容易被忽略Claude Code的对话历史里可能包含敏感信息比如私有代码、日志片段、甚至不小心贴进去的密码。如果开发机是多人共享的最好定期清理不需要保留的会话历史避免信息泄露。我给自己定了个规矩敏感项目用单独的专用用户跑不用共享账号。5. 常见问题与排查实录5.1 连不上服务、会话恢复失败的排查套路在使用过程中最常遇到的是“Claude Code启动时报无法连接服务”的错。很多人这时候会被各种提示绕晕我分享一下我自己的排查顺序。第一步检查API密钥配没配好。直接在开发机上跑echo $ANTHROPIC_API_KEY如果输出为空说明环境变量没加载检查一下~/.bashrc或对应的配置文件。第二步检查网络连通性。Claude Code需要访问模型服务如果开发机所处网络环境有额外限制会出现连接超时或直接报错。我的建议是先确认开发机本身能正常访问大模型的API端点再考虑代理或隧道的问题。第三步检查模型名是否配置正确。经常有人把模型名配错一个字符导致接口返回404或者参数校验错误。Claude Code的报错信息通常会带具体原因仔细读一下错误头部的几个字段往往比瞎猜更快。如果以上都没问题再看是不是版本问题。Claude Code更新比较频繁有时升级后配置文件格式变了旧配置会引发启动异常。这种时候我会备份现有配置重新跑一遍初始化再逐步把自定义项加回去。5.2 tmux会话丢失与上下文丢失tmux本身很稳定但偶尔也会因为机器重启、tmux server崩溃导致会话丢失。这种时候Claude Code自己的会话恢复就派上用场了。我的做法是定期用claude --resume看看有哪些会话可以恢复。这里有一个小技巧Claude Code的会话历史是按项目组织的如果你发现恢复列表是空的很可能是因为你当前的工作目录和原来创建会话时的目录不一致。还有一个我自己踩过的坑tmux里跑Claude Code时如果我在tmux里不小心执行了exit而不是detach整个窗口会关闭tmux会话也会终止Claude Code进程随之退出。这个误操作我犯过不止一次。后来我养成一个习惯在tmux配置文件里给Ctrlb x加了一层确认避免手滑直接退出。5.3 为什么同类工具不一定能做到跨设备接续网上有不少人问“XX工具怎么不能像这样远程控制”我觉得核心问题在于工具是否把会话状态真正保存在了本地。有些AI编程工具把对话上下文放在云端服务端本地只是一个薄客户端这类工具天然支持跨设备因为状态在云端。但代价是数据不在你手上隐私和合规上会有点膈应。Claude Code这种CLI工具则相反状态在本地所以远程接续完全取决于你能不能把本地进程“接住”。用tmux或系统服务把它托管起来就做到了跨设备接续。同理如果你用的是其他类似的CLI工具只要它支持会话持久化并且状态存在本地套用这套方案一样能行。我实际切换过几个不同的CLI工具有些是设计上就偏向云端同步的有些和Claude Code一样可以本地托管。结论是选工具之前先搞清楚“会话状态存在哪里”这个决定了远程接续的玩法上限。6. 应用扩展与后续构想6.1 从个人使用到团队协同跨设备接续会话这件事用熟之后很容易想到团队场景。虽然我不建议多人直接在同一个tmux会话里抢键盘但可以做这样几件事。第一把Claude Code的会话历史作为项目的“活文档”。每次AI处理完一个重要任务我让它在对话里生成一段简短的总结。团队成员连上开发机resume同一个会话就能看到AI和之前的人已经做了哪些工作、有什么结论。第二在共享开发机上给每个项目建立固定的tmux别名比如起名project-a、project-b约定成俗。大家想了解某个项目状态时直接tmux attach -t project-a读一下最近的对话比看文档高效得多。这个玩法和ChatGPT的分享对话链接有点像但Claude Code的会话是活的、可以继续接着跑的这在真正的生产环境里价值很高。6.2 我对“无缝接续”这件事的几点体会这套方案我用了大约一个多月最大的感受是工具还是那个工具但换了个用法之后工作方式完全变了。之前我在Claude Code里不敢聊太深因为怕换台电脑就丢了上下文现在完全不怕了反而更敢把长任务挂在里面让AI慢慢梳理。还有一点体会是关于会话管理的纪律。跨设备接续的前提是会话逻辑清晰如果你一个会话里混了五六个完全无关的任务就算恢复成功AI也容易被乱七八糟的上下文带偏。我现在会坚持一个项目一个会话一个任务尽量聊完聊不完就先把结论沉淀下来再走这样跨设备接续时永远都是清爽的状态。6.3 最后分享一个小技巧都看到这里了送大家一个我自己觉得特别实用的小技巧在SSH配置文件里给不同的开发任务设置快捷别名。在本地设备的~/.ssh/config里这样写Host devbox HostName 192.168.1.100 User dev ServerAliveInterval 30然后本地连接变得非常简洁ssh devbox tmux attach -t claudeServerAliveInterval这个参数很重要它会每30秒发一个心跳包防止网络切换或空闲时间过长时连接被静默断开。这个参数加上之后移动设备在Wi-Fi和4G/5G之间切换时SSH连接不会那么容易卡死。实际用下来这套“Claude Code 终端复用器 SSH”的组合已经成了我日常工作流里最离不开的东西。也希望这篇记录能帮到受困于“换个设备就得从头再来”的你。