远程链接
机器链接通过 SSH 连接 OpenCodex 主机(Home) 与 子机(Child)。主机通过 SSH 隧道为子机提供服务,两台电脑各自继续在 10100 端口运行本地 OpenCodex 服务。控制台会通过 SSH 传递子机专用的链接密钥,因此不需要手动输入令牌。
- 主机可以使用 OpenSSH 密钥登录子机。
- 对于由子机发起的链接,子机必须能使用 OpenSSH 密钥登录主机(不支持密码登录)。
- 子机已安装 OpenCodex 2.66.0 或更高版本(由子机发起的链接还要求主机也满足)。
- 两台电脑运行 macOS 或 Linux。
- 发起链接的控制台需在那台电脑本机打开(独立安装的浏览器或桌面应用),或通过已配对的 Hub 会话打开。
密码 SSH 和 Windows 不在当前流程中。链接可以从任意一侧发起:按下文从主机发起,或按“将这台电脑连接为子机”一节从子机发起。
从 #remote 添加子机
Section titled “从 #remote 添加子机”- 打开控制台的
#remote,开启 Remote Link。 - 选择 Home,然后点击 Continue。SSH 主机列表会打开。
- 从 SSH 候选主机中选择主机,或输入 SSH 配置别名。
- 运行连接测试,并将显示的主机指纹与目标电脑的指纹进行比较。比较指纹可以在 SSH 信任主机前发现错误的电脑或已更换的主机密钥。
- 确认指纹,然后连接子机。
控制台不会要求输入令牌。它会先探测主机,只有明确确认指纹后才能应用链接。
将这台电脑连接为子机
Section titled “将这台电脑连接为子机”在要使用主机提供商的电脑上:
- 在控制台中打开
#remote并开启 Remote Link。 - 选择 Child。SSH 主机列表会打开。
- 选择主机的 SSH 主机,运行连接测试,然后比较并确认其主机指纹。
- 阅读提示后选择 Connect as Child。
连接会重启这台电脑上的 OpenCodex。已在运行的 Codex 请求会先完成,重启期间新的请求可能在最多一分钟内失败。随后控制台会自动重新加载并显示子机链接。Codex 继续使用这台电脑上的 http://127.0.0.1:<port>/v1,无需设置令牌或环境变量:本地 OpenCodex 会把每个请求转发给主机,由主机用它自己的提供商和账户提供服务。
只有当 OpenCodex 在其配置的端口上运行时,才能选择 Child 角色,因为子机会在正好这个端口上重启。如果控制台提示 OpenCodex 未在其配置的端口上运行,请先在该端口上重启它。
- Connected 表示 SSH 隧道已就绪,子机可以使用主机链接。
- Reconnecting 表示正在重试隧道。重试期间请求可能暂时返回带有
Retry-After的503。在从自己的仪表板连接的 Child 上,请求会先最多等待 15 秒让隧道恢复。 - Failed 表示链接需要处理。请检查 SSH 身份验证、已确认的主机密钥、转发或超时原因。从自己的仪表板连接的 Child 会在睡眠、故障或重启后自动重试:超时或转发错误后大约每分钟一次,身份验证错误后每五分钟一次。主机密钥变更时不会重试。
链接失败时不会静默切换到本地提供商。
选择子机的 Disconnect 并确认别名。主机会停止隧道、吊销该子机的链接密钥并删除保存的链接记录。
如果主机无法连接子机来运行断开命令,请选择 Remove here only。这会只删除本机的隧道、密钥和记录。然后登录子机并运行:
ocx disconnect要断开由子机发起的链接,请在子机上运行 ocx disconnect。该命令会断开客户端隧道,并通过 SSH 在 Home 上撤销链接。如果 Home 撤销失败,命令会输出:Home revoke failed; run ocx link revoke --link-id <linkId> on the home.
子机会通过链接使用主机电脑上的提供商和提供商凭据。主机会为每台子机创建单独的链接密钥;移除链接会吊销该密钥。确认前比较主机指纹,避免误接受错误电脑或已更换的主机密钥。由 Tailscale 身份签发的控制台会话不能管理机器链接。 在子机上,密钥只保留在 OpenCodex 内部:Codex 或 Claude Code 在子机上发送的凭据不会转发给主机,子机上任何能访问 127.0.0.1:<port> 的程序都可以无密钥使用主机,这与独立安装给予本地程序的信任相同。来自其他网站的网页会被拒绝。
CLI 参考
Section titled “CLI 参考”ocx link port [--json]ocx link issue --alias <alias> --tunnel-port <port> [--json]ocx link status [--json]ocx link revoke --link-id <id> [--json]
