跳到正文
文档目录

设备

远程主机

在另一台机器上跑 Agent 的操作那一半——添加主机、测试线路、为什么密码不够用、Set Up 究竟装了什么,以及怎么读那一行说明机器是否就绪的话。

设备讲的是模型:一台机器就是一台你能 ssh 上去的机器,其余的一切 都归到它下面。这一页是那个真正干活的页面的操作手册——设置 ▸ 远程主机,一台机器一行, 每一行打开那台机器自己的页面。

在进细节之前,先知道它的形状。一台机器同时是两样东西:一条线路(你怎么到它)和一个 身份(它上面装了什么)。你没法在一台连不上的机器上装任何东西,所以这个页面就按这个 顺序读,下面也是。

添加一台主机

Termio 读 ~/.ssh/config,并且从不背着你改写它。任何你已经能 ssh 上去的机器,Termio 就能连上——没有什么要导入的。

  • 文件 ▸ 连接到… 列出你配置里 Termio 还没打过交道的别名。选一个就会在那儿打开一个 终端。
  • 添加主机…——在文件 ▸ 新建 SSH 连接的末尾,也在远程主机页面上——为一台还不在你 配置里的机器追加一个 Host 配置块。先填地址;名字就是你之后跟在 ssh 后面打的那个。 如果你别的主机已经共用同一个用户和密钥,那一对会直接给你选,而不用重打。

这样加的主机之后就是一个普通的 ~/.ssh/config 条目。机器页面上有一行 Host 配置块 ▸ 编辑, 打开的正是它被定义的那个条目,这样配置始终是答案唯一待的地方。

测试线路

连接方式这一节会说明目标地址,以及 ssh 会怎么登录——要么用你配置里指定的密钥,要么 用「ssh 自己会提供的那些密钥」。旁边是一个测试按钮。它会给出四种结果之一,最后一种 带的是 ssh 自己给的原因,而不是一个固定标签:

结果含义
可连接ssh 连上并通过了认证。没什么要修的。
需要密码这台主机提供的是密码认证。唯一一种有一键修法的失败——见下面。
认证失败它应答了,但拒绝了这套凭据。是密钥的问题,不是网络的问题。
ssh 给出的原因其余所有情况——被拒绝、超时、未知主机——按 ssh 自己的话报出来。

测试用的是这台机器自己的别名,和应用其他部分连它的方式一样。如果 ssh mybox 在你的终端 里就失败,这里也会失败——Termio 不携带任何自己的凭据。

为什么密码不够用

一台需要密码的主机,只会让你打开一个普通终端,别的都不行。这不是什么策略选择——这是算出来 的。承载会话、文件树、搜索和 Git 面板的那些连接全都是非交互式运行的(BatchMode=yes), 也就是说它们永远没法回答一个提示。密码只在有个人坐在那儿打字的地方管用,在其他任何地方 都不管用。

所以这个页面把话说明白,并就地给出修法:设置密钥… 会在一个终端里用 Termio 要用的那把 密钥跑 ssh-copy-id。主机在那儿问你一次密码,之后每条路都能连上它了。如果 ~/.ssh 里 没有一把 ssh 会自己提供的密钥,那一行会说出来,并先把你指向 ssh-keygen。

密钥是你自己的,命令也是标准的那个。Termio 从不保存密码,从不内嵌 SSH 实现,也从不把 凭据写到 ssh 和你的钥匙串本来就放它们的地方之外。

把它设置好

把一台机器准备好是一条真实的依赖链——先把 server 放上去,再弄清它有哪些 Agent 命令行工具, 再把 Termio 的 hooks 和技能写进它们里面。把这些做成四个互相独立的状态显示出来,会让「选一台 机器」变成一场基础设施排障,所以这个页面只承诺一个结果,把那些梯级放在它下面:

那一行说含义
设置这台主机还什么都没问过,或者有一级卡住了。按设置。
检查中…它在跑,并且会说出自己正在哪一级。
已就绪那台机器上的 Agent 能跑——并且在集成开关打开时,能把状态汇报回这里。
更新已就绪新的 server 已经放好了,正在跑的那个因为手上有活儿而把它挡着。

按设置会走完整条梯子:通过 SSH 把 termiod 复制进 ~/.local/bin、探测你的 Agent 命令行工具,然后按设置 ▸ Agent 上那两个开关的要求,把 hooks 和技能对齐——该装的装, 该删的删。两个都关着时它有意什么也不装,那一行也就只承诺那里的 Agent 能跑。不需要 root, 不需要包管理器,也不用往你的 shell 配置里加任何东西。

某一级失败时,那一行会点名那一级,而不是说「设置失败」——而且只说第一级。一台没有 termiod 的机器同样没有 hooks,把两件事都说出来,只会让你去修结果而不是修原因。

某个 Agent 命令行工具没装在那儿,并不会挡住就绪。那是关于那个 Agent 的事实,不是这台 机器的毛病——这台机器已经准备好跑它真正有的那些 Agent 了。

那台机器上的 Agent

一台远程机器的页面上有一个 Agents 链接——「这台机器有什么」——这和设置 ▸ Agents 问的是同一个问题,只是换了个轴。打开它你会看到:

  • 命令路径。 一个 Agent 一行,下面是这台机器自己的答案:已安装、未安装,或者 无法检查。路径留空,就按那台机器的登录 shell 的方式启动这个 Agent;当二进制装在它的 配置没加进来的位置时,就把路径填上(/opt/homebrew/bin/codex)。哪些 Agent 会出现在 这里,仍然由设置 ▸ Agents 决定。

  • Termio 安装的内容。 Termio 写进那台机器上每个 Agent 配置里的东西——Hooks(让 Agent 汇报自己的状态)和技能。一个重新安装 Hooks 和技能按钮修好这两样;手改过 其中一个之后,或者状态点不动了的时候,就用它。

    一台机器拿到的技能,和本机拿到的不是同一个。这里的 Agent 学的是 termio sessions, 限定在它自己的项目里;一台机器上的 Agent 学的是 termiod list、create、send 和 kill,作用范围是整台机器——因为那才是那边真正存在的命令。

无法检查是有意留的第三个答案,而且它从来不是 Agent 的毛病:它的意思是 Termio 连不上这台 机器去问。把它报成「未安装」,会让你去重装一个本来就在的命令行工具;报成「已安装」,则是 在承诺一次根本发生不了的启动。

这两个开关本身——Agent 实时状态和会话控制——在设置 ▸ Agents 上,因为想不想 要这个功能是一种偏好。而它装到哪儿是一次机器操作,所以那件事在这里发生,一台机器一次。 参见状态 hooks 与会话控制。

让一台主机保持最新

同一个设置按钮就是更新。它从任何状态都能用——什么都没装、一个旧版本、一个正在跑的 daemon 还没接过去的版本——而且如果新的那个不应答,它会把旧的二进制放回去。机器页面显示的是 它真正在跑的版本。

一次会打断正在进行的工作的更新不会被执行。那一行会写更新就绪,点名那个挡着它的会话, 并在旁边给出仍然更新。放着不管,新版本会在 daemon 下一次自己停下来时接手。你自己闲着的 终端从不挡更新;一条还在跑的命令或者一个干到一半的 Agent 才会。

从命令行来看,同一次对账就是一个动词:

termiod deploy --host mybox

不管从什么状态开始,它都结束在同一个状态,所以对一台看起来不对劲的机器跑它是安全的。参见 Termio server。

一台主机不应答了

从外往里查——先 ssh,再 daemon,最后 Termio:

ssh mybox true                 # SSH 本身通不通?
termiod list --host mybox      # 那边的 server 在应答吗?
termiod deploy --host mybox    # 重装并校验一遍

连接断了只是把你脱离,不会杀掉任何东西。会话在那台机器上、在它的 daemon 里,重新附着会 恢复屏幕——参见什么会留下来。如果重启之后它们是真的没了,那台 机器缺的是一个服务:termiod service install。

设备切换器会用 ssh 自己的话来报告一台连不上的机器,而不是默不作声,所以你读到的失败就是 ssh 遇到的失败。更多症状和对应的检查在问题排查里。

文档