Skip to content

Repository files navigation

dsh-java-ssh-fleet — SSH Fleet Notes(服务器舰队手册)

DSH Java Native Plugin 独立 AI 产品 #22/30。AI 驱动的服务器舰队手册:只读解析 ~/.ssh/config 风格文本,生成主机路由表、巡检清单、变更台账与风险报告。红线:不发起真实 SSH 连接、不存储/回显密码与私钥内容。

产品定位

面向运维/后端团队:机器一多,~/.ssh/config 就是黑盒——谁在跳板链上、哪台还开着密码登录、密钥文件是不是已经丢了,没人说得清。SSH Fleet Notes 把 config 文本变成结构化舰队视图,AI 负责解读与给建议,但绝代连接服务器。

  • App:Spring Boot,端口 8113
  • Plugin:dsh-java-ssh-fleet-plugin(Java Native,SPI 注册)
  • 数据:本机 ~/.dsh-java-ssh-fleet/changes.json(变更台账,追加式)

工具集(5 个)

工具 说明
sf_parse_config 解析 ssh config:Host 块、HostName/User/Port/IdentityFile/ProxyJump/LocalForward;通配符块单独标记;IdentityFile 只记录路径与存在性,不读内容
sf_fleet_table 舰队路由表:alias→hostname/user/port/密钥/跳板链(ProxyJump 链路展开 + 环路检测)
sf_inspect_checklist 按角色(generic/web/db/gateway)生成只读巡检清单:步骤+命令+通过标准
sf_change_log 变更台账(唯一写入工具):host+action+detail+operator;含高危模式(rm -rf、systemctl stop、sshpass、密码登录等 11 种)直接 422 拒绝
sf_risk_hosts 风险主机识别:密码登录、密钥缺失、DB 端口 LocalForward 暴露、非标准端口、跳板单点

安全红线(systemPrompt + PRE_TOOL_USE hook 双保险)

  1. 所有工具只做文本静态分析,不发起真实 SSH 连接、不代跑服务器命令。
  2. IdentityFile 只输出路径与文件存在性布尔值,绝不读取/回显密钥内容。
  3. 变更台账拒绝记录高危操作模式(/api/fleet/redlines 可查模式列表)。
  4. 用户要求"直接 ssh 上去看"时,AI 必须拒绝并解释产品边界。

REST API

方法 路径 说明
POST /api/fleet/parse 解析 config
POST /api/fleet/table 路由表
POST /api/fleet/checklist 巡检清单(role/os)
POST/GET /api/fleet/changes 写入/查询变更台账(?host= 过滤)
POST /api/fleet/risks 风险主机
GET /api/fleet/redlines 高危模式列表
POST /api/assistant/stream SSE 对话(转发 harness)

E2E

ssh_fleet_notes_e2e.py — 28 断言全通过:

  • T0 健康检查 + 红线模式列表
  • T1 config 解析(主机数/通配符/配置项)
  • T2 路由表(行数/跳板/转发/端口/跳板链)
  • T3 巡检清单(web 角色 nginx+证书步骤)
  • T4 变更台账写入与过滤
  • T5 台账拒绝高危变更(422)
  • T6 风险识别(密码登录/密钥缺失/DB 端口转发/非标准端口/高危计数)
  • T7 SSE AI 经插件工具解析 config(验证未 shell 绕行)
  • T8 SSE AI 风险扫描 + 拒绝真实连接红线验证

运行

mvn package -DskipTests
java -jar dsh-java-ssh-fleet-app/target/dsh-java-ssh-fleet-app-0.1.0-SNAPSHOT.jar --server.port=8113
# 安装插件(harness :8090)
cp dsh-java-ssh-fleet-plugin/target/dsh-java-ssh-fleet-plugin-0.1.0-SNAPSHOT.jar ~/.dsh/standalone/plugins/dsh-java-ssh-fleet-plugin.jar
curl -X POST http://127.0.0.1:8090/api/harness/plugins/install -H 'Content-Type: application/json' -d '{"pluginId":"dsh-java-ssh-fleet-plugin","jarName":"dsh-java-ssh-fleet-plugin.jar","displayName":"SSH Fleet Notes","pluginVersion":"0.1.0","runtimeType":"JAVA_NATIVE","sourcePath":"'$HOME'/.dsh/standalone/plugins/dsh-java-ssh-fleet-plugin.jar","entrypoint":"cn.xiaofuge.dsh.com.dsh.sshfleet.plugin.DshSshFleetPlugin","installMode":"REPLACE"}'
curl -X POST http://127.0.0.1:8090/api/harness/plugins/activate -H 'Content-Type: application/json' -d '{"pluginId":"dsh-java-ssh-fleet-plugin"}'

打开 http://127.0.0.1:8113,左侧 AI 对话,右侧工作台:Config 解析 / 路由表 / 风险 / 变更台账。

About

DSH SSH Fleet Notes: 服务器舰队手册/主机清单/巡检清单 - Java Native Plugin 独立 AI 产品,不发起真实连接

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages