SSH 断开后怎么让 Claude Code 继续跑
合一下笔记本盖子,或者 WiFi 抖一下,SSH 就断了。重新连上去一看,Claude Code 的终端界面没了——不是挂起,不是转后台,是彻底没了,任务和上下文一起消失。
为什么进程不会自己活下来
Claude Code 的终端界面需要一个真终端撑着:画面渲染、按键接收、输出流式吐出,全都依赖挂在一个真实 TTY 上。承载这条连接的 SSH 会话一断,挂在上面的进程通常也活不下来——这其实不是"转后台"的问题,而是"没有终端可以对话"的问题。这也是为什么 nohup 在这救不了你:它防的是你退出 shell 之后进程被连带杀掉,但如果终端本身从一个前台 TUI 底下消失了,nohup 什么忙都帮不上。
不用额外装东西(只靠包管理器)的解法
把它包进 tmux、screen 或 zellij 里跑
在终端复用器里启动 claude(或 claude remote-control),SSH 断开之后进程照样在服务器上跑着——重新连上去,接回同一个窗口就行,不用从头再来。官方文档对 Remote Control 给出的建议正是这个,原因也一样。(来源,官方文档)
有一篇实践博客值得直接一读:作者的 Claude Code 长任务跑到一半,SSH 断线把进程带走了,最后发现只有重新接回终端复用器才能真正接上原来的进度;他最终选定 zellij,给出的理由是它默认自带完整回滚缓冲,而他觉得 tmux/screen 要让鼠标滚动顺手还得额外配置。(来源,他人报告,我们未复现)这是他的个人偏好,不是普遍结论——tmux 和 screen 干的是同一件核心的事。
用 mosh 代替裸 SSH
mosh 是另一层:它本身就是为扛住网络切换和短暂掉线设计的,换个网络、信号闪一下,裸 SSH 可能直接断,mosh 大概率能扛过去。它不是终端复用器的替代品,而是互补——让连接本身更抗造,你就更少撞上"彻底断开"这件事。
这些解法留下的缺口
终端复用器保住的是"进程在服务器上活着",跟你手上有什么设备没关系。你仍然需要一台能跑 SSH 客户端的设备、要记得会话叫什么名字、要手动 ssh 回去再 tmux attach 到正确的窗口——如果你口袋里此刻只有一部没装终端 App 的手机,这些条件一个都凑不齐。mosh 改善的是连接层,但如果你现在手头就是"只有手机,没有电脑,也没有 SSH 客户端",它同样帮不上忙。
PocketShell 在哪一段有用
思路和上面一样——用类似 tmux 的东西把会话保护起来——只是换了个客户端。不是"先找一台电脑,再 SSH 回自己的开发机",而是手机本身就是客户端:这是个自托管的 Web 应用,直接跟你机器上的 agent 对话,不需要先装一个独立的 SSH App 或终端模拟器。它管理的 tmux 会话才是真正的真身,断线期间写下的输出会在重连时按序号补发回来,而不是指望你自己滚屏找回断点。
它也不是 mosh 的替代品——PocketShell 走的是标准 WebSocket 加应用层的重放机制,不是专为扛住半路丢包设计的传输层协议。而且它同样要求你有一台常开的机器在跑 agent,去掉的只是"手机上要有一个像样的 SSH/tmux 客户端"这一环,不是去掉"你需要一台服务器"这件事。