连接远程 core#
ThinkWatch Lite 默认控制它在本机启动的 core,也可以改为连接部署在服务器上的 ThinkWatch Core(在 Linux 上以 systemd 服务运行的 twcore),在同样的页面中显示该服务器的流量、费用与配置。此时网络中的客户端把请求发给服务器上的网关,桌面上的应用负责查看和修改服务器的运行情况。
服务器的安装与配置见 ThinkWatch Core 文档中的服务器部署。本页说明应用一侧的操作。
服务器需要具备的条件#
- 已安装并运行
twcore,例如安装脚本设置好的twcoresystemd 服务; - 已开启远程控制端口,并把应用所在的网段写入
listen.control.remote.allow_from; - core 版本为应用要求的版本。版本不一致时,应用会同时显示两边的版本;在服务器上执行
sudo twcore upgrade --version <版本号> --restart并填入应用显示的版本,即可换成该版本,升级或降级均可。
用安装脚本安装的服务器上,开启端口并查看密钥的命令如下:
sudo -u thinkwatch THINKWATCH_HOME=/var/lib/thinkwatch twcore remote enable --allow 192.168.1.0/24
sudo -u thinkwatch THINKWATCH_HOME=/var/lib/thinkwatch twcore control-key
twcore control-key 第一行输出密钥,之后是控制端口、服务器上监听该端口的地址,以及允许连接的网段。
添加连接#
- 打开设置 › 连接,选择添加远程连接。
- 填写连接名称,以及服务器的地址(主机名或 IP 地址)。
- 填写控制端口,即服务器配置中
listen.control.remote.port的值;该值在写入这一节配置时从 20000 至 32000 之间随机选定。 - 填写密钥,即
twcore control-key输出的 64 位十六进制字符。 - 选择测试连接。应用完成握手,并显示服务器 core 的版本与网关地址。
- 选择保存并切换立即连接,或选择保存以后再切换。
测试失败时,应用会说明原因:
| 提示 | 含义 |
|---|---|
| 无法连接到该地址 | 地址或端口有误、防火墙拦截了该端口,或服务器配置中未启用 listen.control.remote |
| 连接被服务器关闭 | 本机地址可能不在 listen.control.remote.allow_from 中 |
| 密钥不正确 | 与服务器上的密钥不一致;在服务器上执行 twcore control-key 可查看当前密钥 |
| 版本不一致 | 服务器上的 core 版本不同;在服务器上执行 sudo twcore upgrade --version <版本号> --restart,版本号为应用显示的版本 |
切换连接#
应用同一时间只连接一个 core。可以在侧栏底部的连接菜单、设置 › 连接,或菜单栏与托盘菜单的连接子菜单中切换。切换到远程连接之前,应用会先测试该连接。
连接服务器期间,本机的 core 在在途请求结束后停止运行。本机的配置、密钥与请求历史都会保留,切换回本机时 core 重新启动。
本机上(包括 Windows 上 WSL 中)指向本地网关的客户端在本地网关停止期间无法使用。存在这类客户端时,切换时可以选择同时把它们改为指向服务器的网关;之后也可以在客户端页完成同样的修改。
启动时连接可以选择上次使用的连接或本机。在 macOS 上按住 Option 键、在 Windows 上按住 Alt 键打开应用时,会先显示连接选择;在各个平台上,连续两次启动未能完成时也会先显示连接选择。服务器无法访问时,应用持续重试并显示连接状态,可以手动切换到本机;应用不会自行退回本机。
连接期间的变化#
- 概览、流量、密钥、上游、路由与安全显示和修改的是服务器上 core 的配置与历史。
- 客户端与 MCP仍作用于运行应用的这台电脑:客户端页把这台电脑上的客户端改为指向服务器的网关,MCP 页检查这台电脑上的 MCP 服务器、技能与钩子。两页顶部都有相应说明。其他机器上的客户端需要手动填写服务器的网关地址与网关密钥。
- 设置分为这台电脑上的应用(连接、通用、关于、卸载)与服务器上的配置(网关监听、日志保留)两部分。远程控制端口及其密钥只能在服务器上修改。
- ChatGPT 登录只能使用设备码:浏览器登录完成后会回到运行 core 的机器,也就是服务器。
- 上游密钥或请求头中的
${变量名}读取的是服务器上 core 进程的环境变量,系统代理选项指的是服务器的系统代理。 - 不提供诊断包。经远程连接,服务器拒绝三项操作:生成诊断包、停止 core,以及修改
listen.control。 - 连接中断时,各页面保持断开时的状态,恢复连接之前不可修改。应用会发送系统通知,并自动重新连接。
连接的安全性#
控制连接经过 Noise 握手(Noise_NNpsk0_25519_ChaChaPoly_BLAKE2s)加密与认证,预共享密钥是服务器 config.yaml 中的 listen.control.key。整个过程不使用 TLS,也不涉及证书。能访问该端口、但不持有密钥的程序无法控制 core。
服务器只接受来自 listen.control.remote.allow_from 所列网段的连接;同一来源一分钟内握手失败五次后,服务器在一分钟内忽略该来源。网关端口以明文 HTTP 传输请求,因此两个端口都应只对可信网络开放;需要从外部访问时,应使用 VPN 或 SSH 隧道,而不是直接暴露端口。
应用把密钥保存在数据目录中仅当前用户可读的文件里。删除连接时一并删除其密钥,服务器不受影响。在服务器上执行 twcore control-key --rotate 之后,需要在设置 › 连接中编辑该连接并更换密钥。