项目简介
MCP SSH编排器是一个强大的工具,它允许您通过一个统一的接口,安全地在多个SSH服务器上执行命令。它通过Model Context Protocol (MCP) 与LLM(大型语言模型)客户端通信,使得LLM能够安全地管理和操作远程服务器。该编排器具备细粒度的访问控制、网络安全策略和全面的操作审计能力。
主要功能点
- 策略性访问控制: 通过灵活的规则,控制哪些服务器可以执行哪些命令,支持通配符匹配。
- 网络安全: 基于IP地址和CIDR块配置允许/拒绝列表,并验证DNS解析,增强安全性。
- 凭证管理: 安全管理SSH密钥和密码,支持从Docker secrets或环境变量安全获取。
- 服务器组管理: 通过标签对服务器进行分组,方便批量操作和管理。
- 实时输出与取消: 提供命令的实时输出,并支持中途取消长时间运行的命令。
- 审计日志: 记录所有操作的详细JSON格式审计日志,便于安全审查和合规性要求。
- Docker友好: 支持容器化部署,以非root用户运行,并包含健康检查,易于集成到现有基础设施。
安装步骤
推荐使用Docker进行安装,步骤简便:
-
创建配置目录: 在您的主目录(或任何您喜欢的位置)创建用于存放配置、SSH密钥和秘密文件的目录:
mkdir -p ~/mcp-ssh/{config,keys,secrets} -
复制示例配置: 将项目中的示例配置文件复制到您刚刚创建的'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 -
配置SSH密钥: 将您的SSH私钥(例如 'id_ed25519')复制到'keys'目录,并设置正确的权限(重要:确保只有所有者可读):
cp ~/.ssh/id_ed25519 ~/mcp-ssh/keys/ chmod 0400 ~/mcp-ssh/keys/id_ed25519 -
编辑配置文件: 根据您的实际服务器、凭证和安全策略需求,编辑'~/mcp-ssh/config/'目录下的'servers.yml'、'credentials.yml'和'policy.yml'文件。
-
拉取并运行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' 文件,无需重启服务。
信息
分类
开发者工具