fleetsh / 文档

在终端中,fleetsh add hk1 会询问缺少的字段;脚本和 --json 需显式提供必填选项。 详见交互设置。

快速开始

先添加一台主机,确认 SSH 可以登录。 命令尚未加入 PATH 时,请看安装与 PATH。

使用 npx 或 npm 运行

需要 Node.js 22 或更新版本:

npx fleetsh add hk1 --host hk1.example.com --user ubuntu --auth key --key ~/.ssh/id_ed25519
npx fleetsh ssh hk1
npx fleetsh alive
npx fleetsh stats

也可先 npm install -g fleetsh 全局安装,把所有示例的 npx fleetsh 前缀替换为 fleetsh。两种方式与直接运行二进制共用主机清单和系统凭据库。

启动器自动跟随 GitHub Release,优先正式版,没有正式版时才使用预览版。 启动器选项放在子命令前:npx fleetsh --release bundled version 使用原版, --release v0.1.0-alpha.1 固定某个 Go 版本。 可运行 npx fleetsh --launcher-help,或阅读 版本选择、缓存和 PATH。

帮助与离线指南

程序内置带示例的英文命令帮助和十一个离线指南。执行 init 前即可查看, 无需配置文件、网络连接或系统凭据库。在线文档继续按语言分开,默认英语。

位置参数缺失、过多或选项无效时,会在标准错误输出中显示具体错误及该命令的 语法、示例和选项,并返回退出码 2。npx fleetsh exec 和 npx fleetsh exec whoami 都会显示帮助;exec 需要同时提供目标主机或组,以及 一个带引号的远程命令,例如 npx fleetsh exec '@all' "whoami"。 程序内帮助链接使用可直接访问的 HTTPS 文档地址,避开 GitHub Pages 默认地址 继承的 HTTP 跳转。

fleetsh --help
fleetsh help exec
fleetsh add --help
fleetsh docs
fleetsh docs passwords
fleetsh docs groups
fleetsh docs patching
主题 内容
quickstart 首台主机、SSH 指纹信任和常用操作
config 各系统配置位置、默认值和备份
passwords 密码自动保存、更新、共享引用及 sudo
groups 多分组、增删成员关系和标签
selectors 主机与分组的并集、@all 和标签筛选
exec 并发、引号、超时、sudo 和 JSON
proxies 全局/单机 SOCKS5、HTTP/HTTPS CONNECT 和跳板
patching 更新预演、apt 等包管理器升级和重启
monitoring SSH 存活、CPU、内存、swap、用户和磁盘
forwarding 本地、远程和动态 TCP 转发
troubleshooting 退出码、信任、认证和系统凭据库

使用 fleetsh docs TOPIC 查看具体指南;离线正文采用英文纯文本。 --json 用于支持它的列表和批量操作结果,不改变文档格式。 查看帮助不会执行其中的示例,也不会自动打开文档链接。

添加第一台主机

add 会在成功保存主机时自动创建不存在的清单和父目录,无需先运行 init。 init 仍可用于创建空的带注释示例。已有无效或不可读的文件会明确报错,不会自动覆盖。 参数无效或取消密码输入时不会创建配置文件。其他命令遇到缺失清单时会提示使用 add 或 init。 自定义清单的所有命令需带相同的 --config PATH;已有主机别名应使用 edit HOST 修改。

清单保存在本机当前用户的配置目录:Windows 为 %APPDATA%\fleetsh\config.toml, macOS 为 ~/Library/Application Support/fleetsh/config.toml, Linux 为 $XDG_CONFIG_HOME/fleetsh/config.toml 或 ~/.config/fleetsh/config.toml。 详见 存储位置、自定义清单与备份迁移。

fleetsh add hk1 --host hk1.example.com --user ubuntu --auth key --key ~/.ssh/id_ed25519 --groups asia,web
fleetsh add sg1 --host sg1.example.com --user ubuntu --auth password --groups asia
fleetsh ls
fleetsh ls '@asia' --json
fleetsh show hk1
fleetsh edit hk1 --port 2222

添加主机的必填参数和选项

fleetsh add HOST 中的 HOST 是本地别名,不是连接地址。

参数或选项 必填条件
HOST 始终必填:新的本地别名
--host ADDRESS 始终必填,包括 console-only 主机
--user USER SSH 主机必填;默认是 --connection ssh
--key PATH 使用 --auth key 时必填

新建主机时 --auth 可省略,默认 password;--port 默认 22。 省略 --auth 时会隐藏询问两次密码,并自动保存到操作系统凭据库。 --auth agent 需要已启动且加载了密钥的 SSH agent;私钥文件使用 --auth key --key PATH。 已有主机保留原认证方式。若旧主机提示 SSH agent unavailable,且你使用密码登录, 先运行 fleetsh edit HOST --auth password,再运行 fleetsh ssh HOST。 使用自定义清单时,两条命令均需带相同的 --config PATH。 密码会通过隐藏输入询问,不需要提供密码选项。 添加主机时,必填选项缺失或为空,会在读取清单、询问凭据之前列出所有缺失项并显示帮助。 主机选项值无效时也会显示帮助。 edit HOST 沿用省略字段的已有值,并校验合并后的结果;切换到 SSH 连接或密钥认证时, 可能需要补充 --user 或 --key。console-only 主机可以省略 --user。 完整规则可运行 fleetsh add --help 或 fleetsh edit --help 查看。

密码输入不会显示。凭据值保存在操作系统凭据库中,清单仅保存引用名称。 密钥口令也可使用 --credential 引用;没有引用时会通过隐藏输入询问。

现在添加密码认证主机会直接询问两次密码并自动保存,无需手动建立 credential。 自动引用以 fleetsh-ssh- 开头,清单只保存名称。 可用 fleetsh edit sg1 --save-password 重新保存密码。 详见 密码保存 和 后续修改分组。

所有命令支持 --config PATH,以 ~/ 开头的路径会展开。 清单会严格校验,未知字段和明文 password 字段会被拒绝。 edit 会重写 TOML,不保留注释。

确认主机身份

fleetsh ssh hk1 --connect-timeout 60s
fleetsh hostkey show hk1

首次连接显示 SHA256 指纹,需要交互输入 y 确认。 请通过独立来源核实指纹后再信任。确认过程共用连接超时; 需要更多时间时可调整 --connect-timeout。 主机密钥变化始终拒绝连接;无人值守命令会拒绝未知密钥。

确认确实发生合法密钥轮换后:

fleetsh hostkey reset hk1
fleetsh ssh hk1 --connect-timeout 60s

专用 known_hosts 文件位于所选清单旁边。 标准输入为终端时,交互 SSH 会使用 PTY 和终端原始模式,并传递窗口大小变化。 端口转发使用命名配置和 fleetsh forward;OpenSSH 参数透传仍在规划中。

一键远程监控

fleetsh alive
fleetsh stats
fleetsh alive '@web' --timeout 10s
fleetsh stats '@web' --parallel 5 --timeout 15s
fleetsh monitor hk1
fleetsh stats --json

alive 检查 SSH 认证及远程命令执行是否可用;stats(别名 monitor) 一次打印 Linux 的当前用户、CPU 一秒采样占用、内存及 swap 的 MiB/百分比占用、 以及 df -h -P 的磁盘空余。两个命令默认选择 @all,也支持选择器、标签、 并发和超时参数。仅控制台资产会跳过,JSON 使用标准批量报告,快照放在各主机的 stdout 字段。

无需安装远程组件或使用 sudo,只需 Linux /proc 和 awk、sleep、whoami、df。 内存占用按总量减可用量计算,未启用 swap 时显示零。CPU 是主机级计数, 不反映容器配额。每次调用采集一份快照;使用 --sudo 会改变显示的用户。 离线说明见 fleetsh docs monitoring。

端口转发用 fleetsh forward HOST [NAME] 启动, 详见 本地、远程及动态转发配置。

执行命令

PowerShell 中请为分组选择器加引号,例如 fleetsh ls '@asia', 避免把 @ 前缀解析为变量展开语法。相同写法也适用于 Bash 和 Zsh。

fleetsh exec hk1 "uptime"
fleetsh exec '@asia' "df -h" --parallel 10
fleetsh exec hk1,sg1 "uptime" --serial --json
fleetsh exec all "docker ps" --tag web --timeout 60s
fleetsh exec hk1 "apt-get update" --sudo

主机没有 sudo_credential 时,--sudo 使用免密 sudo -n。 引用的 sudo 密码通过 SSH 通道标准输入传送,不会拼接到命令中。 命令执行不接收交互输入;交互程序请使用 ssh。

输出按主机组织,每台主机的标准输出和标准错误分别最多保留 4 MiB。 JSON 包含 results 和 summary,记录主机、退出状态、耗时、错误分类、 截断和跳过状态。仅控制台资产会明确标记为跳过。

退出码:0 表示所有可执行目标成功;1 表示命令失败、取消或执行超时; 2 表示本地用法、配置或凭据准备错误;3 表示连接、认证、代理或主机密钥失败, 包括连接超时。混合远程错误中命令失败优先。 交互远程 shell 非零退出返回 1,传输失败返回 3。

编辑主机与修正保存错的密码

交互终端中,edit HOST 打开菜单;脚本和 --json 必须带修改选项。 查看配置请用 show HOST。交互设置、诊断、持续监控、保存命令和文件传输见 日常操作。 如果保存时输错密码,可重新输入两遍正确的服务器密码:

npx fleetsh edit hk1 --save-password
npx fleetsh ssh hk1
npx fleetsh docs password

这只修改本地保存值,详见密码修正说明。 注意 npx fleetsh docs password 中的空格;fleetshdocs 是另一个 npm 包名。

更新与重启 Linux VPS

fleetsh update '@asia' --dry-run --sudo
fleetsh update '@asia' --sudo
fleetsh update hk1 --dist --sudo --yes
fleetsh reboot '@asia' --dry-run --sudo
fleetsh reboot '@asia' --parallel 2 --sudo --wait-timeout 5m

更新预演会连接以识别操作系统,但不会执行软件包更新。 支持 Debian、Ubuntu、RHEL、Rocky、AlmaLinux、Fedora、CentOS、Arch 和 Manjaro。 任何目标的系统不受支持或预检查失败,都会阻止全部目标执行更新。 重启预演不会连接服务器。

实际更新和重启会显示所选别名并要求确认;自动化显式使用 --yes。 重启默认并发为 2。只有 Linux 启动标识变化且 uptime 健康探测成功,才算重启成功。 命令不会自动重试。

完整维护流程见 给所有 VPS 打补丁。