MistTerm 的三个省时用法

连服务器费时间的,常常不是那条命令,而是主机名对不齐、多机结果靠手抄、常用命令散落在笔记里。登录网站之后,团队命令和登记的机器在后台,本机短名字仍在客户端。面向日常 SSH 的开发和运维。文中按步骤附有真实界面截图。

三节在这一篇里:一、同一份服务器列表 → 二、一次查看多台 → 三、常用命令入库。登录 mistlab.dev 之后,客户端和后台要一起用的地方在 第四节。


一、桌面应用和脚本用同一份服务器列表

桌面客户端里给机器起名、分组很常见;脚本、笔记、CI 却另写 user@IP,或再维护一份 ~/.ssh/config。端口改了、机器换了,两边就容易对不上——界面能连上的那台,脚本不一定打到同一台。

MistTerm 桌面应用和命令行 mist 共用同一份加密保存的服务器列表(默认在 ~/.config/mistterm/sessions.json)。在桌面应用「连接」(Connections)列表里叫 staging-web 的服务器,用 mist ls 列出来也叫这个名字:

左边 MistTerm 的服务器列表,右边终端里 mist ls:同一份服务器清单
同一份清单:左边是桌面「连接」列表,右边终端里 mist ls 列出同名服务器。
mist ls
mist exec demo@127.0.0.1:2201 hostname   # 回显 staging-web
mist ls 列出 5 台服务器;mist exec 按地址连上,hostname 回显 staging-web
mist ls 列出 5 台;mist exec 按地址连上,hostname 回显 staging-web。

已有 OpenSSH 配置时,可用 mist import-ssh-config 导入,不必在界面里一台台重填。导入之后,短名字以本机这份列表为准:mist exec staging-web hostname 会在已保存会话里找名字、id 或主机等于 staging-web 的那一条。找不到,才按 user@host[:port] 临时去连。跑完对一下回显,对得上才说明这次已经连上了。管理面板里登记的名字是另一份,见 第四节,不要和这里的短名字当成同一列。

同一份清单还能传文件。mist get 会话名:/远端路径 本地路径 把文件拉下来,mist put 本地路径 会话名:/远端路径 传回去。冒号只切一次,所以目标请用 mist ls 里的会话名,例如 mist get staging-web:/var/log/app.log ./app.log;不要把带端口的 user@host:port 写在冒号左边,端口会被当成路径。本地路径是目录时,用远端文件名落进去;上传的远端路径以 / 结尾时,保留本地文件名。成功时终端打出两边路径和字节数。服务器列表只需要维护一份,不用到处同步地址,也不会出现界面连的是 A、脚本却连到 B 的情况。


二、一次查看多台服务器的状态

五台看内存,常见做法是开五个窗口,每台敲一遍 free -h,再抄到笔记或表格。容易漏一台,也容易把 A 的数记到 B 上。为这点事拉一整套 Ansible,很多团队觉得过重。

两条路都能跑:

旁栏运维助手:下发同一条只读命令到多台。先出计划卡,可改命令、勾主机;点「确认并执行」(Confirm and Run)之前,哪台服务器都不会执行。确认后在后台执行,不占用你的终端标签页:

运维助手先给出执行计划:查看 5 台服务器的内存,点确认之前不执行
先出计划卡:查看 5 台内存。点「确认并执行」之前,哪台都不会执行。

跑完按台出结果表,每台的内存占用(Mem%)直接在表里,偏高的会标出来:

批量结果表:按台列出内存占用,prod-api 偏高被标红
跑完按台出结果。prod-api 内存占用偏高,表里标了出来。

命令行:同一份会话库上批量只读,例如按分组:

mist exec --group Demo free -h
# 或 mist exec --all free -h

--group Demo 只跑分组名正好是 Demo 的已保存会话,--all 才是这份列表里的全部。默认并行,同时最多 8 台;加上 --serial 改成一台接一台,有一台失败就停。多于一台时,终端按台分段,抬头是用户名、主机和端口,不是桌面里的短名字。分组对不上时,会直接说没有匹配的目标,不会空跑一遍还报成功。没有配置 AI 模型时,助手没法生成计划或给出判断,所以不是装好就能自动巡检。命令行的批量执行不需要 AI 模型。

发一次命令就能代替开五个窗口。图形界面多一步确认,可以避免误操作。终端还在中间,助手只占侧栏。


三、把常用命令存起来,点一下就能用

常用运维命令如果只躺在个人笔记里,换机器、换同事就要再抄一遍。MistTerm 的常用命令(按 Ctrl+K / ⌘K 打开)是个人命令库:带变量、可点进当前终端,也可用 mist frag list / mist frag run 在命令行复用。

演示里先写进几条只读常用项,例如:

常用命令命令
查看内存 (free -h)free -h
磁盘使用 (df -h)df -h
系统运行时间 (uptime)uptime
监听端口 (ss -lntp)ss -lntp
常用命令面板:四条只读命令,刚用过的显示使用次数
常用命令里已有四条只读命令。刚用过的会显示使用次数。

除了保存命令,还可以:

和「危险命令拦截」要分开看:命令审计默认只记录,不拦截。要拦,得由团队管理员开启策略(团队版);拦住以后要有路,指回你们认可的常用命令才有意义。这次本地检查拦住了 DROP DATABASE:终端上是一条红色提示,还没有团队替代命令,这条命令没有发到机器上。先把命令库写实,比空喊「装完就拦」更管用。

要说清楚的是:本地检查只看从常用命令、命令历史、AI 运维助手和批量执行发出去的命令。同一条命令要是直接在终端里敲,或者 ssh 登录进服务器以后手动敲,目前都不检查,也不会出这条红色提示。

红色提示:本地检查拦住了 DROP DATABASE,命令没有发到机器上
终端上的红色提示:本地检查拦住了 DROP DATABASE,还没有团队替代命令。这条命令没有发到机器上。

四、登录之后,客户端和网站要一起用

前三节不登录网站也能做。桌面和 mist 共用本机那份名字:mist ls 里的 staging-web,就是桌面「连接」里的那一台;mist exec 按地址跑完,hostname 回显还是它,说明这次已经连上了。团队成员、团队命令、登记过的机器不在这份本机列表里,要打开 mistlab.dev。

登录后右上角进控制台。再点「管理」才是管理面板。SSH 和敲命令仍在客户端。人在哪个团队、团队命令、登记了哪些机器,以网站上看到的为准。

控制台里看你在哪些团队

控制台打开「团队」。演示账号在 Acme Ops Demo 里,角色是 ADMIN,可以进「管理成员」和「AI 设置」。后面「常用命令」页的团队下拉,选项就是这里的团队。

控制台团队页:Acme Ops Demo,角色为 ADMIN
控制台「团队」:Acme Ops Demo。这个账号是 ADMIN。

团队命令在控制台

上一节 Ctrl+K 里那四条(free -h、df -h、uptime、ss -lntp)是个人命令,存在本机。网站上没有这四条。

团队共用的命令在控制台「常用命令」,要先登录。演示团队里有两条运维命令:

控制台常用命令页,团队选的是 Acme Ops Demo,能看到 Rotate application logs 和 Tail service logs
控制台「常用命令」,团队是 Acme Ops Demo。图里露出 Rotate application logs 和 Tail service logs。

这些命令的修改在网站上做:编辑、删除,或生成文档。客户端不登录,Ctrl+K 里仍然只有个人那几条。这次没有截到登录之后客户端里的团队命令,那一屏长什么样就不写。

上面那条红色提示是本地检查:拦住了 DROP DATABASE,还没有团队替代命令,这条命令没有发到机器上。

管理面板仪表盘上的数字

点「管理」进入管理面板,第一页是仪表盘。这一页的数字是有的:用户 60,团队 14,常用命令 13,服务器 23,下载 9,近 7 天活跃 0。左边是系统信息,右边快捷操作有登录证书、服务器管理、审计日志、命令审计、MistDocs。

管理面板仪表盘:用户 60、团队 14、常用命令 13、服务器 23、下载 9、近 7 天活跃 0,快捷操作含登录证书
管理面板仪表盘。用户 60,团队 14,常用命令 13,服务器 23,下载 9,近 7 天活跃 0。快捷操作含登录证书。

「常用命令 13」是管理面板上的总数,不要和 admin 团队那几条、也不要和客户端个人那几条当成同一个数。

控制台导航里另外有一页叫「概览」。那一页是团队侧的统计,和这里管理面板的总数不是同一套数。

管理面板里登记的机器

管理面板「服务器」按团队列机器。admin 下面有演示机:演示-bastion、演示-staging-web、演示-staging-db,状态列写的是「已完成」。同一套状态还有「待安装」「安装中」「安装失败」。「已完成」只说明安装步骤走完,不说明 SSH 已经连上了。其它团队下面还有各自登记的机器。

地址列里的公网 IP 已打码。文中不写地址。

管理面板服务器列表:含演示-bastion 等主机,公网 IP 已打码
管理面板「服务器」。演示机含 演示-bastion、演示-staging-web、演示-staging-db。公网 IP 已打码。

这张表和第一节的本机列表不是同一份。桌面和脚本对得上的仍是 staging-web 这种短名字;管理面板上的演示机名字带「演示-」前缀。要敲命令,回 MistTerm,用本机那个名字。管理面板不替你连 SSH。


对照看看你们团队的做法

  1. 界面里这台机器的名字,脚本和笔记里是不是同一份?mist ls 对不对得上?对得上的是本机短名字,例如 staging-web。
  2. 多机只读是五个窗口手抄,还是计划确认 / mist exec --group?--group 只跑这个分组,--all 才是全部。
  3. 个人常用命令在客户端里吗?团队共用的 Deploy staging web、Tail service logs、Rotate application logs 在控制台片段页里吗?两份不要并成一份。
  4. 管理面板上登记的 演示-bastion、演示-staging-web、演示-staging-db,和本机 mist ls 那一列是不是被当成了同一张表?
  5. DROP DATABASE 被拦住了没有?这次本地检查拦住了,终端上是一条红色提示,命令没有发到机器上。还没有团队替代命令。别忘了:在终端里直接敲的命令,目前不检查。