集群命令服务

一个通过SSH暴露严格集群命令集的轻量级本地MCP服务器,默认安全且仅允许白名单命令和路径。

  • by mak8427
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 mak8427/safe-ssh-MCP

使用说明

集群MCP工具

这是一个最小的本地MCP服务器,通过SSH公开一组严格的集群命令。 默认情况下,它被设计为安全的,只允许白名单中的命令和路径。

需求

  • Python 3.9+
  • SSH密钥(示例): ~/.ssh/your_key
  • MCP Python包(其中一个应该可以工作):
    • pip install mcp

运行MCP服务器

cd ~/tools/mcp/cluster_tools
python server.py

命令配置

命令在中定义 commands.yml每个条目声明工具名称、参数、, 限制和命令令牌。根据中的允许列表验证路径 config.py (ALLOWED_PATH_PREFIXES).

要添加新工具,请执行以下操作:

  1. 在下添加新条目 commands 在 commands.yml.
  2. 重新启动MCP服务器。

命令令牌中内置的占位符:

  • {ssh_user}
  • {max_grep_matches}

allowed: all 表示“全局允许列表下的任何路径”。

最小架构

version: 1
commands:
  - id: cluster_ls
    description: List directory contents at path.
    command:
      - ls
      - -la
      - --
      - "{path}"
    params:
      path:
        type: path
        required: true
        allowed: all

共同领域

  • id:工具名称(snake_case)
  • description:简短的人类可读摘要
  • command:令牌列表,无外壳
  • params:参数定义图
  • limits:可选安全限制

参数类型

  • path:绝对路径,根据允许列表验证
  • string:非空字符串
  • int:整数,可选 min/max

可选参数字段

  • allowed: all 或允许的路径前缀列表(用于 path 仅)
  • allowed_values:枚举列表 string 价值观
  • value_map:从用户值映射到命令令牌值
  • max_length:最大长度 string
  • default:默认情况下 required: false

虚拟命令

cluster_cd 验证路径并在不运行SSH的情况下返回它。它很有用 用于客户端工作目录选择。

安全兼容性标志

此存储库当前默认为安全展开的兼容模式。 您可以使用环境变量启用更严格的行为:

  • CLUSTER_TOOLS_ENFORCE_STRICT_HOST_KEY_CHECKING=true
  • CLUSTER_TOOLS_SSH_KNOWN_HOSTS_FILE=/absolute/path/to/known_hosts
  • CLUSTER_TOOLS_ENFORCE_CANONICAL_PATH_CHECKS=true
  • CLUSTER_TOOLS_REJECT_DUPLICATE_YAML_KEYS=true

在兼容模式下,会发出警告并保留以前的行为。

SSH代理要求

此服务器运行 BatchMode=yes。必须加载受密码保护的密钥 在启动服务器之前通过SSH代理(例如, ssh-agent + ssh-add).

安全规则

  • 没有任意命令执行。
  • 没有shell元字符。
  • 路径允许列表已强制执行。
  • 强制执行输出和文件大小限制。
  • 严格的SSH主机验证和规范路径检查可用 选择加入强化标志。