SSH和Docker命令执行服务器

一个提供SSH和Docker命令执行能力的消息控制协议(MCP)服务器,允许通过标准化接口在远程系统和Docker容器上执行命令。

  • by aweher
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 aweher/mcp-ssh-frr

使用说明

MCP SSH Docker服务器

提供SSH和Docker命令执行功能的消息控制协议(MCP)服务器。此服务器允许您通过标准化的接口在远程系统和Docker容器上执行命令。

特性

  • 在远程系统上执行SSH命令
  • Docker容器命令执行
  • 实时命令输出流
  • 长时间运行的命令的进度报告
  • 结构化JSON输出支持
  • 命令取消支持
  • 连接和命令超时
  • 全面的错误处理

先决条件

  • Python 3.7+
  • SSH访问目标系统
  • 目标系统上安装了Docker(用于Docker命令)

安装

使用pip

pip install mcp-ssh-frr

来源

  1. 克隆存储库:
git clone https://github.com/aweher/mcp-ssh-frr.git
cd mcp-ssh-frr
  1. 创建并激活虚拟环境:
python -m venv .venv
source .venv/bin/activate  # On Windows: .venv\Scripts\activate
  1. 安装依赖项:
pip install -r requirements.txt
  1. 在开发模式下安装软件包:
pip install -e .
  1. 配置SSH:

    • 将您的SSH私钥放入 ./config/id_rsa

    • 设置环境变量:

      export SSH_HOST="your-remote-host"
      export SSH_USER="your-username" # Defaults to root
      export SSH_PORT="22"  # Optional, defaults to 22
      
    • 别忘了将你的公钥添加到 authorized_keys 上的文件 your-remote-host

用法

启动服务器

python mcp_ssh_docker_server.py

可用工具

1.SSH命令执行(ssh_exec)

在远程系统上执行任何命令:

{
    "name": "ssh_exec",
    "args": {
        "command": "ls",
        "args": ["-la", "/etc"],
        "stream": false,  # Set to true for real-time output
        "structured_output": false  # Set to true for JSON output
    }
}

2.Docker命令执行(ssh_exec_docker)

在Docker容器中执行命令:

{
    "name": "ssh_exec_docker",
    "args": {
        "container": "my-container",
        "command": "vtysh",
        "args": ["-c", "show ip bgp"],
        "stream": false,
        "structured_output": false
    }
}

列出可用容器:

{
    "name": "ssh_exec_docker",
    "args": {
        "list_containers": true,
        "structured_output": false
    }
}

输出格式

  1. 文本输出(默认):
$ command arg1 arg2
(exit code 0)

output line 1
output line 2
  1. 结构化JSON输出:
{
    "command": "command arg1 arg2",
    "exit_code": 0,
    "stdout": "output line 1\noutput line 2",
    "stderr": "",
    "duration": 0.123,
    "metadata": {
        "container": "my-container"  // For Docker commands
    }
}
  1. 进度更新(流式传输时):
[progress] 45% - Bytes read: 1024

配置

超时

  • SSH连接超时:10秒
  • 命令执行超时:30秒
  • 流最大时间:300秒(5分钟)

缓冲区大小

  • 流缓冲区大小:1024字节

错误处理

服务器处理各种错误情况:

  • 连接超时
  • 身份验证失败
  • 命令执行错误
  • Docker容器错误
  • 命令取消

安全

  • 使用基于SSH密钥的身份验证
  • 命令参数已正确转义
  • 无命令注入漏洞
  • 安全连接处理

贡献

  1. 分叉存储库
  2. 创建要素分支
  3. 提交您的更改
  4. 推到分支
  5. 创建拉取请求

许可证

GPLv3

作者

Ariel S.Weher