客户端自动更新
6.0.1 起,中心模式的新安装默认开启自动更新,客户端名单沿用本次安装选择。共享后台运行时每 60 秒检查中心发布清单;后台未运行时,下次启动客户端会再检查。ssh_connection_status 返回实际 companionVersion 和更新状态。ssh_node_manage 的 {"server":"@local","action":"upgrade"} 可请求立即检查。
更新器从已配置中心的 HTTPS 源下载,逐文件检查大小和 SHA-256,拒绝跳转、路径越界和旧发布序号。启用自动更新表示信任该中心管理员发布的程序;清单摘要用于校验内容,不是独立发行者签名。本地模式需明确设置可信发布源:安装参数 --update-source https://your-host/current.json --auto-update on;不设置时保持关闭。--auto-update off 关闭自动更新。
下载完成后,更新器等待 MCP 操作、已建立的业务会话/隧道、集群任务和原生数据流空闲,再安装到新版本目录。新后台实际通过 MCP 验证后才切换活动版本;6.0.1 及后续的连接桥保持同一个 STDIO 进程,重新连接已验证的新后台,并通知工具目录变化。正在使用的会话会让更新保持 deferred,关闭相应会话后继续。安装失败尝试恢复旧程序配置,结果见 rollbackSucceeded 和私密日志。
此前的 5.1.x 和早期 6.0 包没有更新器,必须先运行一次新版完整安装器,并让对应客户端加载新的 MCP 连接桥。普通升级复用本机 .sshmcp/connection.json,无需重新发送私有 Key。原私有 ZIP 不会随中心变化;新电脑可使用新版公开包配合自己的 profile,或重新制作私有包。
更新状态和日志位于 .sshmcp/updates/;active.json 记录已验证程序,accepted.json 记录已接受的发布序号。不要删除活动版本、修改摘要或用降低发布序号的方式回滚。需要回滚时,先关闭自动更新,再显式运行保留的旧版完整安装器并完成实际验证。
中心发布
仅替换中心可执行文件不会产生客户端发布。中心管理员必须将已验证的 Linux/Windows 平台包作为一个发布单元,生成清单与固定路径的文件:
python3 tools/publish-update.py --linux-package /absolute/linux.tar.gz --windows-package /absolute/windows.zip --version 6.0.3 --release-id release-20260911-1 --sequence 2026091101 --output /absolute/published
示例版本、发布 ID 和 sequence 必须换成本次真实包与大于当前已发布序号的值,不能照抄历史序号。发布 ID 不可复用;sequence 对同一发布源严格递增。工具拒绝含 API_KEY 的私有包,验证平台包全部摘要和对应源码版本。先同步输出中的 downloads/updates/ 到同域 HTTPS 静态目录,确认全部文件可下载且摘要一致,再原子发布 current.json。
中心服务环境设置 MCP_UPDATE_MANIFEST=/absolute/published/current.json,公开 /v1/releases/current 到中心后端;它继承 API Key 鉴权。反向代理需将同源 /downloads/* 映射到发布目录的 downloads/,全部保持 Cache-Control: no-store。未设置清单时返回 204。只有清单无需鉴权的独立静态发布源才使用 --update-source;不同源不会收到中心的 API Key。
每次发布保留旧文件和备份。用一台已启用更新器的真实电脑验证:中心清单与文件可达、客户端自行下载、新安装摘要一致、同一客户端连接切到新后台、一个真实目标操作成功。中心健康检查或安装文件写入均不能替代这些结果。