项目简介

MCP SSH编排器是一个强大的工具,它允许您通过一个统一的接口,安全地在多个SSH服务器上执行命令。它通过Model Context Protocol (MCP) 与LLM(大型语言模型)客户端通信,使得LLM能够安全地管理和操作远程服务器。该编排器具备细粒度的访问控制、网络安全策略和全面的操作审计能力。

主要功能点

  • 策略性访问控制: 通过灵活的规则,控制哪些服务器可以执行哪些命令,支持通配符匹配。
  • 网络安全: 基于IP地址和CIDR块配置允许/拒绝列表,并验证DNS解析,增强安全性。
  • 凭证管理: 安全管理SSH密钥和密码,支持从Docker secrets或环境变量安全获取。
  • 服务器组管理: 通过标签对服务器进行分组,方便批量操作和管理。
  • 实时输出与取消: 提供命令的实时输出,并支持中途取消长时间运行的命令。
  • 审计日志: 记录所有操作的详细JSON格式审计日志,便于安全审查和合规性要求。
  • Docker友好: 支持容器化部署,以非root用户运行,并包含健康检查,易于集成到现有基础设施。

安装步骤

推荐使用Docker进行安装,步骤简便:

  1. 创建配置目录: 在您的主目录(或任何您喜欢的位置)创建用于存放配置、SSH密钥和秘密文件的目录:

    mkdir -p ~/mcp-ssh/{config,keys,secrets}
  2. 复制示例配置: 将项目中的示例配置文件复制到您刚刚创建的'config'目录中:

    cp examples/example-servers.yml ~/mcp-ssh/config/servers.yml
    cp examples/example-credentials.yml ~/mcp-ssh/config/credentials.yml
    cp examples/example-policy.yml ~/mcp-ssh/config/policy.yml
  3. 配置SSH密钥: 将您的SSH私钥(例如 'id_ed25519')复制到'keys'目录,并设置正确的权限(重要:确保只有所有者可读):

    cp ~/.ssh/id_ed25519 ~/mcp-ssh/keys/
    chmod 0400 ~/mcp-ssh/keys/id_ed25519
  4. 编辑配置文件: 根据您的实际服务器、凭证和安全策略需求,编辑'~/mcp-ssh/config/'目录下的'servers.yml'、'credentials.yml'和'policy.yml'文件。

  5. 拉取并运行Docker镜像:

    docker pull ghcr.io/samerfarida/mcp-ssh-orchestrator:0.1.0
    docker run -i --rm \
      -v ~/mcp-ssh/config:/app/config:ro \
      -v ~/mcp-ssh/keys:/app/keys:ro \
      -v ~/mcp-ssh/secrets:/app/secrets:ro \
      ghcr.io/samerfarida/mcp-ssh-orchestrator:0.1.0

    此命令会启动MCP SSH编排器服务器,并将其配置、密钥和秘密文件目录挂载为只读卷,确保运行时安全。

服务器配置(MCP客户端使用)

MCP客户端(如Claude Desktop)需要通过JSON配置来连接MCP SSH编排器。以下是一个配置示例,您需要将其添加到MCP客户端的配置中(例如,macOS上是'~/Library/Application Support/Claude/claude_desktop_config.json'):

{
  "mcpServers": {
    "ssh-orchestrator": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-v", "/Users/YOUR_USERNAME/mcp-ssh/config:/app/config:ro",
        "-v", "/Users/YOUR_USERNAME/mcp-ssh/keys:/app/keys:ro",
        "-v", "/Users/YOUR_USERNAME/mcp-ssh/secrets:/app/secrets:ro",
        "ghcr.io/samerfarida/mcp-ssh-orchestrator:0.1.0"
      ]
    }
  }
}

配置参数说明:

  • 'mcpServers': 这是一个JSON对象,其中包含所有您希望连接的MCP服务器的配置。
  • 'ssh-orchestrator': 这是您为该MCP服务器自定义的唯一名称。
  • 'command': 启动MCP服务器的执行命令。在此示例中,我们使用'docker'命令来启动Docker容器。
  • 'args': 传递给'command'的参数列表。
    • 'run': Docker命令,用于运行容器。
    • '-i': 保持标准输入(stdin)打开,这是MCP服务器通过'stdio'传输协议与客户端通信所必需的。
    • '--rm': 容器退出时自动删除,以保持系统整洁。
    • '-v /Users/YOUR_USERNAME/mcp-ssh/config:/app/config:ro': 将您本地的MCP SSH配置目录挂载到容器内部的'/app/config'路径。':ro'表示该卷为只读,增强安全性。请务必将'/Users/YOUR_USERNAME'替换为您的实际用户路径!
    • '-v /Users/YOUR_USERNAME/mcp-ssh/keys:/app/keys:ro': 将您本地的SSH密钥目录挂载到容器内部的'/app/keys'路径,只读。
    • '-v /Users/YOUR_USERNAME/mcp-ssh/secrets:/app/secrets:ro': 将您本地的秘密文件目录挂载到容器内部的'/app/secrets'路径,只读。
    • 'ghcr.io/samerfarida/mcp-ssh-orchestrator:0.1.0': 指定要运行的Docker镜像的名称和版本。

关于秘密信息: 除了使用挂载的秘密文件,您还可以通过在'args'列表中添加Docker环境变量参数,例如:'-e MCP_SSH_SECRET_STAGING_PASSWORD=your-password',来传递秘密信息。

基本使用方法

一旦MCP SSH编排器服务器运行并通过MCP客户端配置连接,您就可以通过LLM客户端调用其提供的工具,以实现远程服务器管理:

  • 检查服务器状态('ssh_ping'): 一个简单的健康检查,调用该工具将返回字符串 '"pong"'。
  • 列出所有已配置主机('ssh_list_hosts'): 调用此工具将返回一个包含所有主机别名的JSON数组,例如 '["web1", "db1", "app1"]'。
  • 获取主机详细信息('ssh_describe_host'): 调用此工具并提供 'alias' 参数(例如:'{"alias": "web1"}'),以获取指定主机的详细配置信息,以JSON格式返回。
  • 执行SSH命令('ssh_run'): 调用此工具,提供 'alias' 和 'command' 参数(例如:'{"alias": "web1", "command": "uptime"}'),即可在指定主机上执行命令。该工具将返回包含 'task_id'、'exit_code'、'duration_ms'、'output' 等信息的JSON对象。
  • 批量执行命令('ssh_run_on_tag'): 调用此工具,提供 'tag' 和 'command' 参数(例如:'{"tag": "prod", "command": "df -h"}'),可以在所有带有特定标签的主机上执行命令。返回结果将是一个JSON数组,包含每个主机的执行结果。
  • 取消运行中的命令('ssh_cancel'): 如果您获得了 'ssh_run' 或 'ssh_run_on_tag' 返回的 'task_id',可以调用此工具并提供 'task_id'(例如:'{"task_id": "web1:a1b2c3d4:1234567890"}')来尝试取消该任务。
  • 重新加载配置('ssh_reload_config'): 调用此工具可以重新加载服务器配置,例如 'servers.yml'、'credentials.yml' 和 'policy.yml' 文件,无需重启服务。

信息

分类

开发者工具