Skip to content

功能请求:为 ssh_servers 配置增加 group 字段 #55

Description

@ice616

需求背景

目前 .env / TOML 配置中每台服务器的定义都是扁平结构(例如 [ssh_servers.gitea_runner34]),没有原生的分组字段。虽然项目已经提供了 ssh_group_manage / .server-groups.json 这套独立的分组机制,但它与服务器定义本身是分离的两份数据,存在以下痛点:

  1. 无法从服务器配置本身直接导出/导入分组信息:当需要把 ssh-manager 的配置迁移/同步到其他工具(比如把服务器清单导出给团队内部的堡垒机管理工具、或从其他 SSH 管理工具的分组结构导入进来)时,ssh_servers 表本身不带分组标签,只能额外维护一份 .server-groups.json 做映射,容易出现两份数据不同步。
  2. 按组查看/操作不够直观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_managelist 等只读操作)/ ssh_execute_group 等分组相关工具可以直接基于这个字段做"动态分组"(类似现有 all 这种 dynamic group 的实现方式),不强制要求,但作为分组能力的补充,避免每次都要手动维护 .server-groups.json 里的服务器列表。
  • 导出功能(exportToToml / exportToEnv)需要把 group 字段一并导出。

这样配置本身即可承载分组信息,方便:

  • 导出到其他工具时,分组语义不丢失;
  • 从其他工具(如 SSH 客户端软件的 vault/主机管理器,通常自带 group/folder 概念)导入时,可以直接映射到这个字段;
  • 无需额外维护 .server-groups.json 也能获得基础的"按组查看/操作"体验。

现有替代方案

目前只能:

  1. ssh_group_manage 单独维护一份 .server-groups.json,与服务器定义分离维护;
  2. 或者在服务器名字上加前缀(如 prod_xxx)模拟分组,但这只是命名约定,工具层面不识别。

两种方式都不利于配置在不同工具间的互相导入导出。

感谢维护这个项目!如果这个方向可行,我也可以尝试提交 PR。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions