Electerm 终端触发器:让终端自己回答提问
有些提示永远不变。Cisco 分页符第一百次说 --More--。每连一台新主机,scp 都要问一遍 are you sure you want to continue connecting (yes/no)?。一条长长的 show running-config 每翻一页就停下来,等你按空格——你早就按烦了。
electerm 触发器自动化的正是这一层:它们监听解码后的终端输出流,匹配文本或正则表达式,然后替你把回答送回会话——一个空格、一个 y、一个回车,或者只是一条桌面通知。可以把它理解成每个终端标签页内置的 ZOC 自动应答。
先看这段:触发器会把真实输入送到真实机器。
只要带问号就回 y这种大网规则,早晚会替你确认掉不该确认的东西。文末的安全守则不是可读可不读的部分。
1. 三层触发器并排对比
一条触发器规则永远是同样的形状——名字、匹配、动作、触发模式(第 3 节细讲)。区别在于规则住在哪里,这决定了它对谁生效、会不会被保存:
| 全局(预设) | 书签 | 本次会话 | |
|---|---|---|---|
| 入口 | 设置 → triggers | 书签编辑表单 → triggers 标签页 | 底栏 ƒx 图标 → This session 标签页 |
| 对谁生效 | 每个终端标签页(可在单个会话里静音) | 从这个书签打开的每个会话 | 只对当前标签页、只在现在 |
| 保存吗 | 保存——写入数据库并参与同步 | 保存——存在书签记录上 | 不保存——只在内存里,标签页关闭即消失 |
| 适合 | 永远想要的分页、确认、断线提醒 | 某台主机或某个角色特有的登录与提示 | 先做一次实验,跑顺了再存成规则 |
底栏把全貌摆在眼前:底栏的 ƒx 图标上有一个徽标数字,就是当前标签页的生效触发器数量。点开弹窗有两个标签页——Global(全部预设规则,开关翻的是持久化的全局默认)和 This session(这里生效的全部规则,开关只静音当前会话)。预设规则的增删改在设置面板里做;弹窗负责开关和临时规则。
单个标签页的生效规则 = 全局规则(叠加你对本会话的开关覆盖)+ 本标签页的会话规则。只有预设规则会持久化;书签规则跟着书签走;会话临时规则只活在内存中的标签页上。
2. 60 秒建第一条触发器
- 打开设置 → triggers,点 New(或从 Presets 里挑)。
- 命名
Cisco pager,匹配类型 Text,值--More--。 - 动作 Send text,值一个空格,Send Enter 关掉,模式 Every new match + cooldown,冷却
500毫秒。 - 保存,然后开个会话跑一条会分页的命令。每个
--More--都会被自动空格翻过,全程不用动手。
习惯 JSON?编辑器上有个 JSON 按钮——粘贴规则数组,非法正则或缺失匹配会被直接打回并告诉你原因:
[
{
"name": "Cisco pager: --More--",
"enabled": true,
"match": { "type": "text", "value": "--More--", "caseSensitive": false },
"action": { "type": "send", "value": " " },
"sendEnter": false,
"mode": "cooldown",
"cooldownMs": 500
}
]
3. 一条规则是怎么工作的
每条规则是五个决定:
- 匹配——Text(字面量,特殊字符已替你转义)或 RegExp(原生 JavaScript 正则)。默认不区分大小写;
Password:和password:必须分开时再打开大小写开关。匹配前会剥掉 ANSI 颜色码并统一换行,所以带颜色的提示照样能命中,分两次到达的半截输出也能拼起来触发。 - 动作——Send text 把内容写入会话;Notify only 只弹桌面通知(附带命中的输出片段),什么都不发送。
sudo password这类提示就该用通知:你想被提醒,而不是让软件替你输密码。 - Send Enter——默认开,发送内容尾部没有
\r或\n时会自动补一个回车。分页空格这种单键回答记得关掉。发送文本支持转义:\n \t \r \\ \xHH十六进制字节和^X脱字符号(^M是回车,^C是 Ctrl-C)。 - 模式——Every new match + cooldown(默认,每次新命中都触发,但冷却期内最多一次)、Every new match(不限流)、Once per session(每会话只触发一次,比如新 SSH 主机指纹的
yes)。 - 启用——每条规则有总开关,底栏弹窗里还能按会话覆盖:在弹窗里关掉某条全局规则,只影响当前标签页,不落盘。
引擎还有两个值得知道的保证。第一,刚启用或刚改过的规则会忽略历史输出——只对改动之后到达的内容反应,开规则不会把昨天的滚屏重播一遍。第二,冷却压住的命中也会被消费掉——扎根在旧输出里的贪婪正则没法一路长进新数据块、被误认成一次新命中。
4. 八个值得直接拿走的预设
设置 → triggers → Presets 自带八个起点。它们都是普通规则——选中之后,按你家主机的实际情况改改匹配或回复即可:
| 预设 | 匹配 | 回复 |
|---|---|---|
Cisco pager: --More-- |
文本 --More-- |
空格,不回车 |
| Pager: press any key to continue | 正则 press any key|press .* to continue |
空格,不回车 |
| Confirm: Are you sure? [y/n] | 正则 are you sure.*\[y/n\]|confirm.*\(y/n\) |
y + 回车 |
| Overwrite confirm: Overwrite? (y/n) | 正则 overwrite.*\(y/n\) |
y + 回车 |
| sudo password prompt → notify | 正则 \[sudo\]\s*password |
只通知 |
| SSH new host key → accept once | 正则 are you sure you want to continue connecting |
yes + 回车,每会话一次 |
| Telnet login: auto username | 正则 login[: ]*$|username[: ]*$ |
你的用户名 + 回车(记得填) |
| Connection closed → notify | 正则 connection (closed|reset|refused)|lost connection |
只通知 |
5. 现成配方
任何分页一路翻到底——用 Cisco 预设;如果你整天泡在 less 和 journalctl 里,把分页预设放宽到 --More-- |\(END\)|--More--。
批量上线时接受主机指纹——SSH 新主机预设 + once 模式。第一个提示回一次 yes,本会话内再也不触发,之后真遇到中间人提示也不会被自动放行。
让 sudo 来拍你肩膀——sudo 预设 + Notify only。通知里带最后约 240 字符的命中输出,一眼看出是哪个标签页在要密码。永远不要自动发送密码:它会进日志、进滚屏、进屏幕共享。
telnet 只填用户名——telnet 预设回答 login: 并回车,密码提示留给自己(再配一条 password: 的通知规则)。
长迁移期间盯着断线——connection-closed 预设 + Notify only + 5 秒冷却。一次事故一条提醒,而不是一个数据块一条。
分主机的登录流程——规则放在书签上,而不是全局。问 Username: 的核心交换机和问 login: 的 Linux 盒子答案不一样;书签触发器让它们互不串味。
拿不准的规则? 先在底栏弹窗里做成 This session 规则试。标签页一关它就消失,亲眼看它跑顺了,再转正成全局或书签规则。
6. 真正要紧的安全守则
自动应答是个带锋刃的工具。五个习惯能让它安全:
- 把正则钉死。
.*y/n.*能匹配半本手册。用are you sure.*\[y/n\]——只认那个提示,别的不认。 - 能用
once和cooldown就不用repeat。 不限流的repeat每次新命中都发;提示循环起来一秒能打出几十个回答。 - 密码和破坏性操作只通知不发送。 密码、
rm -rf、drop table、reboot——答错的代价很大的,一律让触发器拍肩膀,别替你按回车。 - 按会话静音,别删全局。 某一台主机的回显不对劲?在底栏弹窗的 This-session 页关掉就行。全局默认和其它标签页原样不动。
- 先在空白标签页里试。 会话规则免费又一次性。先看它完整跑过一轮真实提示,再毕业到设置或书签。
7. 和 electerm 其它功能配合
- 快速命令是手动发一条常用回复;触发器是自动发。如果你发现自己每天在同一个提示前点同一个快速命令,那次点击就该长成一条触发器。
- 批量输入 / 镜像输入一次驱动多台主机;触发器负责回答这些主机反问回来的问题。把命令镜像到四个节点,分页触发器替四个
--More--一起翻页。 - 书签触发器跟着书签走同步,在笔记本上调好的登录流程,到台式机直接就是对的。
速查表
- 一条触发器 = 匹配(文本或正则,默认不区分大小写,先剥 ANSI)→ 动作(发送文本或只通知)→ 模式(冷却 / 每次都发 / 每会话一次)。
- 三个家:全局(设置里,持久化 + 同步)、书签(跟着主机走)、本次会话(底栏
ƒx,只在内存)。 - 底栏
ƒx徽标 = 当前标签页的生效触发器数。Global 页翻的是存盘的默认;This-session 页只静音本标签页。 - 发送文本支持
\n \t \r \\ \xHH ^X;除非原文已有换行或你关掉开关,否则自动补回车。 - 口诀:常规按键用发送,密码和破坏性操作用通知,拿不准先放本次会话。
下一篇:Electerm 的 SSH 能力——触发器要住进去的那些会话先配好;或者批量输入与镜像输入——一次驱动多台终端。
