dsh-port-map:为 DeepSeek Harness 提供只读端口、服务与 Caddy 路由地图

前言

在 DeepSeek Harness(DSH)里跑智能体或运维助手时,模型常会面对同一类问题:某个端口上是什么服务、systemd 单元或 Docker 容器谁占用了监听、Caddy 反代是否仍指向存活的上游、哪些地址对公网暴露。手工 ss、systemctl、docker ps 再对照 Caddyfile,步骤多且容易漏项。dsh-port-map 把这类信息整理成只读工具,供 DSH 调用,不打开、不关闭、不重配任何资源。

这是什么

dsh-port-map 是社区插件,维护者为 ozanstn1-stack,在插件目录中归类为 admin-security。简介为:Read-only port, service and Caddy route map for DeepSeek Harness。当前 npm 包版本为 0.1.0,许可证 MIT。

它面向已在主机上部署 DSH 的场景,用四个只读工具回答「谁在听哪个口」「路由是否 up」等问题,与直接 SSH 查表相比,信息被结构化后更适合交给 Harness 里的智能体做排查与说明。

核心功能

插件提供的工具均为 read-only,README 明确说明:Nothing is opened, closed or reconfigured.

工具 作用
listening_ports 列出 TCP 监听:端口、绑定地址、可达范围(public / localhost / interface)、进程,以及所属的 systemd 单元或 Docker 容器。可按 scope、port 过滤。
service_map 反向视图:每个单元/容器及其监听端口,并标出无人认领的端口。
caddy_routes 解析 Caddyfile,得到 site → path → reverse_proxy 上游,并核对上游是否在监听套接字上存活。
url_check 对配置白名单内的主机发起 HTTP 检查,返回状态码、延迟与 Content-Type;遇到重定向只报告,不跟随。

归属解析逻辑(资料原文):先用 ss -tlnpH 得到套接字与 PID;再通过 /proc/<pid>/cgroup 关联 systemd 单元;docker-proxy 监听通过 docker ps 的发布端口映射到容器名(如 docker:openviking)。无法归属时报告为 unowned:<process>,不做猜测。

安装与启用

安装命令来自官方 README,不要使用未在资料中出现的 github:owner/repo 形式。

dsh plugin --profile web add dsh-port-map
systemctl restart dsh-web   # or restart your DSH process

环境要求:

  • DSH >= 0.2.1-rc.4(Node ^22.19.0 || >=24.0.0)
  • 端口相关工具依赖 ss(iproute2);docker 与 Caddyfile 为可选

在 DSH 配置中可挂载插件实例,示例(字段含义见下一节):

- id: port-map
  config:
    caddyfile: /etc/caddy/Caddyfile
    urlCheck:
      hosts:
        - 127.0.0.1
        - localhost
        - example.org
      timeoutMs: 10000
    docker: true
    safety:
      timeoutMs: 15000
      maxOutputBytes: 65536

配置项

Key 默认值 含义
caddyfile /etc/caddy/Caddyfile caddy_routes 解析的文件路径。
urlCheck.hosts ["127.0.0.1", "localhost"] url_check 允许请求的主机;其余一律拒绝。
urlCheck.timeoutMs 10000 单次请求超时(毫秒)。
docker true 是否为已发布端口解析 Docker 容器名。
safety.timeoutMs 15000 命令默认超时。
safety.maxOutputBytes 65536 单次调用输出上限。

典型输出示例

下列片段来自 README,便于对照工具返回格式。

监听端口摘要:

Listening TCP sockets (39):
  port  address         scope     owner
   8790  127.0.0.1       localhost dsh-web.service
  1933  127.0.0.1       localhost docker:openviking
  9090  0.0.0.0         public    map-service.service

Bound to all interfaces: 22, 443, 8642, 8799, 9090, 9091, 9094, 11434

Caddy 路由与上游状态:

Caddy routes (11) from /etc/caddy/Caddyfile:
  example.org /panel → 127.0.0.1:8788 · up (vps-panel.service)
  example.org /gone  → 127.0.0.1:9999 · DOWN

适用场景与注意

适合谁: 在单机或 VPS 上同时跑 DSH、systemd 服务、可选 Docker 与 Caddy 的维护者;希望智能体在对话中快速回答端口占用、公网暴露面、反代是否断链,且不需要插件改防火墙或重启服务。

权限与安全: 插件以当前 DSH 进程的用户权限执行(例如能读 /proc、能否跑 docker ps 取决于运行用户)。安装前应在 GitHub 阅读源码与 MIT 许可证;url_check 仅允许 urlCheck.hosts 中的主机,避免任意 URL 探测。

已知限制(README「Honest limits」):

  • 只报告,不修复;不改防火墙、不重启服务。
  • Caddyfile 解析支持 site 块、handle/handle_path 与 reverse_proxy;!!js、import 片段或 php_fastcgi 等未建模,不会出现在结果中。
  • Docker 名解析依赖当前用户可用的 docker ps;否则仍列出套接字,可能显示 docker:<id>。
  • url_check 不跟随重定向链。

DeepSeek Harness 生态采用「一切皆插件」思路;社区目录站点与 DeepSeek / 幻方无官方从属关系,本文介绍的是社区目录中的第三方插件,而非官方应用商店条目。

链接

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜