2026:TCP keepalive、TCP_USER_TIMEOUT 与在租用的 ProxyMac Mac mini 上挺过闲时 SSH
当运维人员从欧洲或美国东岸跨洋连入位于香港、东京、首尔、新加坡或美国 的 ProxyMac Mac mini 时,常见现象是:敲键盘时一切正常,但只要让 SSH 闲在 Cursor 或 tail -f 上 7 至 25 分钟,会话就无声消失。问题很少是「苹果芯片上 SSH 坏了」—绝大多数时候,是路线上的静默中间件定时器 与默认未证明活跃性的套接字叠加。本文给出一套双层层叠心智模型(OpenSSH 保活加上内核 TCP 行为)、一张以可观测症状为键的决策表、一段可复制的 ~/.ssh/config 段落(30 秒 级应用层探测、连续 四 次无应答后由客户端主动断开),以及可粘进 Confluence 的七步 证据链(许多访客 Wi-Fi 在运营商侧有120 秒 量级的闲时表)。文末链接到 autossh、Mosh 与保活、高时延客户端调优 与 MTU/PMTUD 黑坑 等伴读,避免在其实是 IP 优先级与压缩问题时仍死磕 TCP 定时器。若你希望把新同事从「包丢失都市传说」里拉出来,请在套接字路径被证明稳定后,再统一对照 帮助中心 的起步材料与 各区域透明定价 做资源决策。
团队若在亚太时段集中跑夜间构建,往往会在同一条长链路 上复用跳板与会话多路复用,此时「偶尔断一次」会放大成周报表里的噪声。将时延分位数、探测是否离开发送主机 与 应用层/传输层 的观测拆开记录,是避免反复争论「到底是谁的 keepalive 不够 aggressive」的前置条件。下文的矩阵与 runbook 尽量把各层信号写成可复验条目,使你在和运营商或企业网络团队开故障单时,能带上可引用的数字 与可重复的步骤。额外提醒:在咖啡馆或酒店等场域,UDP 语音优化 有时会与空闲 TCP 抢队列深度,这会让表观上的「断线点」看起来随机—遇到此类场景请优先收齐 BSSID 与上游 NAT 信息。
若你已经确认往返时延在业务可接受范围,而问题只在无输入窗口 时出现,就几乎可以肯定需要本文的双层保活。反之,如果活跃文件传输也间歇卡死,请先交叉验证 MTU 与路径 MTU 发现,再回来看 keepalive 数学。将排查顺序写进团队手册,能显著减少「把 SSH 与网络混为一谈」的误伤调参。以下章节按从症状到落地的顺序组织,便于在紧急故障时从目录直接跳转。
长链路上,闲时 SSH 如何「静悄悄断掉」
症状可粗分为三类:(A) 终端无横幅、也迟迟不出现 Broken pipe,只有敲键后才突然清醒或报错;(B) 在最后一次有数据后120 到 900 秒 的整倍数附近出现 client_loop: send disconnect: Broken pipe;(C) 交互式 shell 看起来活着,而 scp 或 rsync 长时间卡在 0%。A 多指向上游 NAT 绑定在无声路径上过期 且未发 RST,常见于会压制空闲 TCP 的酒店网。B 多映射到有状态防火墙 的「最大静默流时长」策略。C 常与 PMTUD 黑洞 交叠,请在深入调保活前对照 MTU 专文。为降低误判,建议在相同客户端上并行开启带时间戳的轻量网络探针,以区分是运营商策略还是本机睡眠/节电。
- 经 SSH 隧道的屏幕共享 会放大「画面静止、键盘不静止」的闲时间隙。
- 跳板机链 使定时器相乘,每一跳都可能实施约 300 秒 的闲时策略。
- 由 LaunchAgent 拉起的 git pull 在承载网视角可能仍像闲连接,虽服务端仍有后台工作。
内核 TCP 保活与 OpenSSH 的 ServerAliveInterval
在 macOS 上,内核 TCP 栈能按 net.inet.tcp.keepidle 一类延迟之后发送保活段,但你无法只凭本机 sysctl 就支配远端与中间件。OpenSSH 的 ServerAliveInterval 会注入对 SSH 守护进程有意义的协议报文,从而在不等待 某些操作系统默认的、可达数小时 的 TCP 空窗。二者互补:SSH 保活证明SSH 连接 仍可用;TCP 保活则证明四元组 在端到端仍被各层承认。对混合云与零信任边界的路线,常出现「只补一层仍偶发」的情况,把两层一起纳入变更记录最稳妥。若你同时开 VPN,也要记录其对分流与 idle UDP/TCP 的差异,以免把公司策略误判为对端问题。
按故障类型选择的调参矩阵
| 症状特征 | 第一旋钮 | 第二旋钮 | 升级路径 |
|---|---|---|---|
| 闲时超过 15 分钟,一按键即恢复 | ServerAliveInterval 30 | 减少跳板跳数 | 抓 Wi-Fi BSSID,并对照 访客 Wi-Fi 指南 |
| Broken pipe 出现在 300 秒 的倍数上 | 客户端 TCPKeepAlive yes | 按 ControlMaster 文 启用多路复用 | 向运营商索要文档化的闲时上限 |
大文件 scp 无闲时却停滞 | 查 MSS/钳位 | 做 PMTUD 试验 | 用延迟矩阵重选区域 |
| 仅夜间构建偶发失败 | 在 mini 上设夜间 curl 轻触 | 记 WAN 侧 DHCP 续租 | 将任务改为 mini 侧主动拉取 |
为 ProxyMac 区段准备客户端 ~/.ssh/config
请为每个区域写清主机别名,使新成员拷贝即得同一组数字。下面以香港 为例,亦可原样平移到 日/韩/新/美 别名。仅在你通读高时延文之后再改 IPQoS:错误地把吞吐类与低时延类混用,可能在大文件拷贝时饿死保活小包。对跨洋链路,ControlPath 命名要包含用户与目标,以免共享笔记本上的多租户冲突。最后把这段与安全基线(如限制算法列表)分文件管理,通过 Include 拉取,能显著减少合并冲突与误伤生产。
Host proxymac-hk-dev
HostName your-node.proxymac.com
User youruser
ServerAliveInterval 30
ServerAliveCountMax 4
TCPKeepAlive yes
IPQoS throughput
ControlMaster auto
ControlPath ~/.ssh/cm-%r@%h:%p
ControlPersist 10m
七步探针:可直接粘进 SRE 手册
- 用
ping -c 20记基线 RTT,存中位与 p95。 - 开纯 SSH 会话,闲 12 分钟,看壳层是否仍可 echo。
- 在一次性会话中开
ssh -vvv,检索是否卡在expecting SSH2_MSG_KEXINIT一类停顿。 - 并行 512MB 文件
scp;若 90 秒 后吞吐骤塌,多怀疑 MTU 而非保活算法。 - 记分隧道企业 VPN 是否开启,其对 idle UDP 与到 mini 的 TCP 常不等价处理。
- 若你可改
sshd,让服务端的ClientAliveInterval与客户端同频;别一边 10 秒、一边 30 秒 徒耗资源。 - 将定稿后的配置 与 OpenClaw 网关的 systemd/launchd 注记同仓归档,人读与机读同一份真值。
与 autossh、Mosh、高时延调优结合—避免「同一招算两次」
我们的 autossh 与 Mosh 指南 已覆盖进程守护与基于 UDP 的恢复;当你必须保留 纯 OpenSSH 走 TCP 的场景,例如 git+ssh、ssh -L 到本地 OpenClaw 入口,或 rsync --partial 走 SSH 时,再把本文加入清单。若考虑切 Cipher 与压缩,请在保活已立证 之后顺序推进,因 AEAD 在 M4 大拷贝时与 CPU 占用的耦合,可参见 IPQoS 与密码套件 专文。团队若在文档中混用 Mosh 与纯 SSH,务必写清各自动化任务的传输语义,避免审计追问时口型不一致。将「可替代路径」和「强依赖路径」在架构图分色,也能减少新同事误用命令组合。
ServerAliveInterval 设到 5 秒级可能在部分抗 DDoS 设备上触发突刺检测—请渐进上调;若企业边界对探测突发回 RST,需要与安全团队对齐白名单与速率。
常见问题
要不要在 mini 上把 sysctl 的 TCP keepidle 调得更激进? 多数情况下先改客户端。数据中心侧邻接的 mini 很少是那条脆弱腿的主因。
ControlMaster 会让闲时更糟吗? 多会话复用单一 TCP 流能省握手,但也会在命中60 秒 量级的 Wi-Fi 限流时,把多会话一把梭哈—留意每路径的并发与承载。
纯 IPv6 出口怎么办? Happy eyeballs 可能掩藏 IPv4 侧黑洞。请在调参前记清 SSH 目标到底走哪一家族,以免两套栈各写一套不兼容的定时器。若组织策略未来强制 IPv6-only,提前在变更窗口验证 DNS 与证书覆盖。
为何在 ProxyMac 上测 TCP 卫生学「更有把握」
租用一台搭载 Apple 硅 M4 的 Mac mini 作为稳定锚点 位于 港/日/韩/新/美,可预期对等互联;对比开发者笔记本在咖啡馆与家庭 NAT 间跳来跳去。你能持续采 sysctl 与 nettop 基线,让 OpenClaw 自动化与 CI 机密同驻一机,并可在需要时打开 屏幕共享 处理受信提示。将这类网络纪律与 分区域清晰定价 成对使用,可让融资与运维理解:为亚太闲时单开第二台 mini,往往比把所有流量挤进周五夜里必塌的那条隧道更省总成本。最后,请把本页链接进你们的入职 Runbook 与 on-call 手册的「长链路」章节,减少口口相传的漂移。若你正在评估供应商 SLA,把本文七步也作为验收脚本 的参考附录,会显著加速扯皮收敛。