SSH远程命令执行服务

一个基于MCP协议的SSH远程命令执行服务器,支持持久化SSH连接和多种shell操作符,适用于远程服务器管理和自动化任务。

  • by kvirund
  • Go
  • 本地部署
  • 更新于
在 GitHub 查看 kvirund/mcp-ssh-executor

使用说明

MCP SSH执行器

一种模型上下文协议(MCP)服务器,支持通过SSH连接执行远程命令。此服务器维护持久的SSH隧道,并提供在远程计算机上执行shell命令的工具。

特性

  • 持久SSH连接:跨多个命令执行保持打开的SSH连接
  • Docker容器化:在最小的Docker容器中运行,便于部署
  • 壳牌运营商支持:完全支持管道(|),逻辑与(&&),逻辑OR(||),和其他shell操作符
  • 身份验证方法:支持SSH密钥和密码身份验证
  • MCP协议:实施官方MCP stdio协议,实现无缝集成

建筑

服务器由以下部分组成:

  • 基于Go的MCP服务器:使用JSON-RPC 2.0在stdio上实现MCP协议
  • SSH连接管理器:处理SSH连接生命周期和命令执行
  • Docker容器:提供带有SSH密钥挂载的隔离执行环境

安装

先决条件

  • 码头工人
  • SSH访问目标计算机
  • SSH私钥(推荐)或密码

构建并运行

  1. 克隆存储库:

    git clone https://github.com/kvirund/mcp-ssh-executor.git
    cd mcp-ssh-executor
    
  2. 构建Docker镜像:

    docker build -t mcp-ssh-executor .
    
  3. 配置MCP设置: 添加到您的MCP配置中(例如。, cline_mcp_settings.json):

    {
      "mcpServers": {
        "ssh-executor": {
          "command": "docker",
          "args": ["run", "-i", "--rm", "-v", "C:\\Users\\username\\.ssh:/root/.ssh", "mcp-ssh-executor"],
          "env": {
            "SSH_HOST": "your-server-ip",
            "SSH_USER": "your-username",
            "SSH_PRIVATE_KEY_PATH": "/root/.ssh/id_rsa",
            "SSH_PORT": "22"
          },
          "disabled": false,
          "autoApprove": []
        }
      }
    }
    

用法

可用工具

  1. connect_ssh

    • 建立与已配置服务器的SSH连接
    • 无需参数
    • 返回成功/错误状态
  2. execute_命令

    • 在远程服务器上执行shell命令
    • 参数: command (string)-要执行的命令
    • 返回命令输出和退出状态
  3. disconnect_ssh

    • 关闭SSH连接
    • 无需参数
    • 返回确认

示例使用流程

  1. 连接:呼叫 connect_ssh 建立连接
  2. 执行命令:
    • ls -la -列出目录内容
    • ps aux | grep nginx -查找nginx进程
    • cd /var/log && tail -f syslog -监控系统日志
    • mkdir backup && cp *.log backup/ && tar czf backup.tar.gz backup -创建备份
  3. 断开:呼叫 disconnect_ssh 完成后

壳牌运营商

所有标准外壳操作员的工作:

  • 管道: command1 | command2
  • 逻辑与: command1 && command2
  • 逻辑或: command1 || command2
  • 重定向: command > file.txt
  • 背景: command &

配置

环境变量

变量 描述 必填
SSH_HOST 目标服务器主机名/IP 是
SSH_USER SSH用户名 是
SSH_PRIVATE_KEY_PATH SSH私钥路径 是(如果不使用密码)
SSH_PASSWORD SSH密码 是(如果不使用密钥)
SSH_PORT SSH端口(默认:22) 否

SSH密钥设置

对于基于密钥的身份验证:

  1. 如果需要,生成SSH密钥对: ssh-keygen
  2. 将公钥复制到服务器: ssh-copy-id user@host
  3. 安装 .ssh Docker中的目录: -v /path/to/.ssh:/root/.ssh

发展

地方发展

  1. 安装Go 1.23+

  2. 克隆和构建:

    git clone https://github.com/kvirund/mcp-ssh-executor.git
    cd mcp-ssh-executor
    go mod tidy
    go build -o ssh-executor .
    
  3. 本地测试:

    export SSH_HOST=your-host
    export SSH_USER=your-user
    export SSH_PRIVATE_KEY_PATH=/path/to/key
    ./ssh-executor
    

测试MCP协议

向stdin发送JSON-RPC消息:

# Initialize
echo '{"jsonrpc": "2.0", "id": 1, "method": "initialize"}' | ./ssh-executor

# List tools
echo '{"jsonrpc": "2.0", "id": 2, "method": "tools/list"}' | ./ssh-executor

安全考虑

  • SSH密钥比密码更安全
  • 使用SSH端口转发以提高安全性
  • 限制目标服务器上的SSH用户权限
  • 定期轮换SSH密钥
  • 使用 ssh-keygen -t ed25519 适用于现代密钥类型

故障排除

连接问题

  • 验证SSH凭据和服务器可访问性
  • 检查SSH密钥权限(chmod 600 ~/.ssh/id_rsa)
  • 确保SSH服务正在目标服务器上运行

Docker问题

  • 验证Docker守护进程是否正在运行
  • 检查卷安装路径
  • 确保SSH目录具有正确的权限

MCP集成

  • 确认MCP设置已正确配置
  • 检查Docker镜像是否已构建并可用
  • 验证是否设置了环境变量

许可证

MIT许可证-有关详细信息,请参阅许可证文件。

贡献

  1. 分叉存储库
  2. 创建要素分支
  3. 进行更改和测试
  4. 提交拉取请求

相关项目