需求背景
目前 .env / TOML 配置中每台服务器的定义都是扁平结构(例如 [ssh_servers.gitea_runner34]),没有原生的分组字段。虽然项目已经提供了 ssh_group_manage / .server-groups.json 这套独立的分组机制,但它与服务器定义本身是分离的两份数据,存在以下痛点:
- 无法从服务器配置本身直接导出/导入分组信息:当需要把 ssh-manager 的配置迁移/同步到其他工具(比如把服务器清单导出给团队内部的堡垒机管理工具、或从其他 SSH 管理工具的分组结构导入进来)时,
ssh_servers 表本身不带分组标签,只能额外维护一份 .server-groups.json 做映射,容易出现两份数据不同步。
- 按组查看/操作不够直观:
ssh_list_servers 的输出里没有分组信息,如果想快速筛选"某个环境/项目下的所有服务器",只能人肉看命名前缀或者去查 .server-groups.json。
期望的方案
在服务器定义里增加一个可选的 group 字段,例如:
[ssh_servers.gitea_runner34]
host = "192.168.31.34"
user = "root"
port = 22
group = "local"
description = "Gitea Actions runner LXC 105 gitea-runner34"
对应 .env 格式:
SSH_SERVER_GITEA_RUNNER34_GROUP=local
具体诉求
group 作为服务器定义的一个普通字段(类似 description),非必填,不影响现有配置的兼容性。
ssh_list_servers 输出中带上 group 字段,方便查看和按组筛选。
- 如果
group 字段存在,ssh_group_manage(list 等只读操作)/ ssh_execute_group 等分组相关工具可以直接基于这个字段做"动态分组"(类似现有 all 这种 dynamic group 的实现方式),不强制要求,但作为分组能力的补充,避免每次都要手动维护 .server-groups.json 里的服务器列表。
- 导出功能(
exportToToml / exportToEnv)需要把 group 字段一并导出。
这样配置本身即可承载分组信息,方便:
- 导出到其他工具时,分组语义不丢失;
- 从其他工具(如 SSH 客户端软件的 vault/主机管理器,通常自带 group/folder 概念)导入时,可以直接映射到这个字段;
- 无需额外维护
.server-groups.json 也能获得基础的"按组查看/操作"体验。
现有替代方案
目前只能:
- 用
ssh_group_manage 单独维护一份 .server-groups.json,与服务器定义分离维护;
- 或者在服务器名字上加前缀(如
prod_xxx)模拟分组,但这只是命名约定,工具层面不识别。
两种方式都不利于配置在不同工具间的互相导入导出。
感谢维护这个项目!如果这个方向可行,我也可以尝试提交 PR。
需求背景
目前
.env/ TOML 配置中每台服务器的定义都是扁平结构(例如[ssh_servers.gitea_runner34]),没有原生的分组字段。虽然项目已经提供了ssh_group_manage/.server-groups.json这套独立的分组机制,但它与服务器定义本身是分离的两份数据,存在以下痛点:ssh_servers表本身不带分组标签,只能额外维护一份.server-groups.json做映射,容易出现两份数据不同步。ssh_list_servers的输出里没有分组信息,如果想快速筛选"某个环境/项目下的所有服务器",只能人肉看命名前缀或者去查.server-groups.json。期望的方案
在服务器定义里增加一个可选的
group字段,例如:对应
.env格式:具体诉求
group作为服务器定义的一个普通字段(类似description),非必填,不影响现有配置的兼容性。ssh_list_servers输出中带上group字段,方便查看和按组筛选。group字段存在,ssh_group_manage(list等只读操作)/ssh_execute_group等分组相关工具可以直接基于这个字段做"动态分组"(类似现有all这种 dynamic group 的实现方式),不强制要求,但作为分组能力的补充,避免每次都要手动维护.server-groups.json里的服务器列表。exportToToml/exportToEnv)需要把group字段一并导出。这样配置本身即可承载分组信息,方便:
.server-groups.json也能获得基础的"按组查看/操作"体验。现有替代方案
目前只能:
ssh_group_manage单独维护一份.server-groups.json,与服务器定义分离维护;prod_xxx)模拟分组,但这只是命名约定,工具层面不识别。两种方式都不利于配置在不同工具间的互相导入导出。
感谢维护这个项目!如果这个方向可行,我也可以尝试提交 PR。