返回市场
ssh-mcp

ssh-mcp

作者:mingyang912 星标更新:2025-05-16

项目介绍

SSH-MCP 服务器

Crates.io 版本 Docker 镜像版本

这是一个用 Rust 实现的带有模型上下文协议(MCP)集成的 SSH 客户端服务器,允许大型语言模型(LLMs)连接到 SSH 服务器并利用 SSH 功能。

轻量且高效:

  • 🚀 ssh-mcp: 仅 4.3MB 的二进制大小,1.8MB 的内存占用
  • 🔄 ssh-mcp-stdio: 仅 1.5MB 的二进制大小,2.3MB 的内存使用
  • 🐳 docker: 仅 27.5MB 的最终镜像大小

功能

  • SSH 客户端集成: 通过 MCP 命令连接到 SSH 服务器
  • SSH 命令执行: 在远程 SSH 服务器上运行命令
  • 端口转发: 设置 SSH 隧道和端口转发(默认启用 port_forward 功能)
  • 会话管理: 跟踪和管理多个 SSH 会话
  • MCP 协议支持: 使用 poem-mcpserver 构建以实现与 AI/LLM 的兼容性
  • 有状态连接: 维持跨多个命令的 SSH 会话

安装和集成

您有两个安装选项:

选项 1: 使用 Docker(推荐)

无需 Rust 工具链 - 只需 Docker!

# 从 Docker Hub 拉取预构建的镜像
docker pull mingyang91/ssh-mcp

# 运行服务器
docker run -p 8000:8000 mingyang91/ssh-mcp

或者自己构建镜像:

# 构建 Docker 镜像
docker build -t ssh-mcp .

# 运行服务器
docker run -p 8000:8000 ssh-mcp

选项 2: 通过 Cargo 安装

前提条件:

  • Rust 1.70.0 或更高版本
  • Cargo 包管理器
cargo install ssh-mcp

与 mcpServers 集成

要使用 SSH-MCP 与 mcpServers,向您的 mcpServers JSON 配置添加以下配置:

如果是通过 Cargo 安装:

{
  "mcpServers": {
    "ssh": {
      "command": "ssh-mcp-stdio", 
      "args": []
    }
  }
}

如果是使用 Docker:

{
  "mcpServers": {
    "ssh": {
      "command": "docker",
      "args": ["run", "--entrypoint", "ssh-mcp-stdio", "-i", "--rm", "ssh-mcp"]
    }
  }
}

这将注册 SSH 处理程序,允许 LLM 通过您的 MCP 服务器管理 SSH 连接。

使用

连接到 SSH 服务器

使用密码认证

{
  "command": "ssh_connect",
  "params": {
    "address": "example.com:22",
    "username": "user",
    "password": "password"
  }
}

使用密钥认证

{
  "command": "ssh_connect",
  "params": {
    "address": "example.com:22",
    "username": "user",
    "key_path": "/path/to/private_key"
  }
}

使用 SSH 代理认证

{
  "command": "ssh_connect",
  "params": {
    "address": "example.com:22",
    "username": "user"
  }
}

响应:

{
  "session_id": "c8a3b2e1-4f5d-6e7c-8a9b-0c1d2e3f4a5b",
  "message": "成功连接到 user@example.com:22",
  "authenticated": true
}

如果连接失败:

{
  "error": "连接失败: 连接被拒绝"
}

执行命令

{
  "command": "ssh_execute",
  "params": {
    "session_id": "c8a3b2e1-4f5d-6e7c-8a9b-0c1d2e3f4a5b",
    "command": "ls -la"
  }
}

响应:

{
  "stdout": "total 32\ndrwxr-xr-x  5 user group 4096 Jan 1 12:00 .\ndrwxr-xr-x 25 user group 4096 Jan 1 12:00 ..\n-rw-r--r--  1 user group  142 Jan 1 12:00 file.txt\n",
  "stderr": "",
  "exit_code": 0
}

设置端口转发

注意:端口转发默认通过 port_forward 功能标志启用。

{
  "command": "ssh_forward",
  "params": {
    "session_id": "c8a3b2e1-4f5d-6e7c-8a9b-0c1d2e3f4a5b",
    "local_port": 8080,
    "remote_address": "internal-server",
    "remote_port": 80
  }
}

响应:

{
  "local_address": "127.0.0.1:8080",
  "remote_address": "internal-server:80",
  "active": true
}

断开会话

{
  "command": "ssh_disconnect",
  "params": {
    "session_id": "c8a3b2e1-4f5d-6e7c-8a9b-0c1d2e3f4a5b"
  }
}

响应:

"会话 c8a3b2e1-4f5d-6e7c-8a9b-0c1d2e3f4a5b 成功断开"

列出所有活动会话

{
  "command": "ssh_list_sessions"
}

响应:

[
  "c8a3b2e1-4f5d-6e7c-8a9b-0c1d2e3f4a5b",
  "d9b4c3a2-5e6f-7g8h-9i0j-1k2l3m4n5o6p"
]

配置

服务器可以通过以下环境变量进行配置:

变量描述默认值
MCP_PORTMCP 服务器的端口8000
RUST_LOG日志级别info

功能配置

项目使用 Cargo 功能来启用/禁用某些功能:

功能描述默认值
port_forward启用 SSH 端口转发支持启用

要构建不带端口转发的版本:

cargo build --release --no-default-features

贡献

欢迎贡献!请随时提交拉取请求。

CI/CD 管道

此项目使用 GitHub Actions 进行持续集成和部署:

  • 对主分支的所有 PR 和提交都会自动测试
  • 标记的发布(以 'v' 开头)会自动发布到 crates.io
  • Docker 镜像会自动构建并推送到 Docker Hub
    • 主分支的最新标签
    • 语义版本化的发布版本标签(如 v1.0.0, v1.0 等)
  • 创建新发布时,请确保 Cargo.toml 中的版本与标签匹配(例如 v0.1.0)
  • 您需要在 GitHub 仓库设置中设置 CARGO_REGISTRY_TOKEN, DOCKERHUB_USERNAMEDOCKERHUB_TOKEN 密钥

许可证

本项目根据 MIT 许可证授权 - 查看 LICENSE 文件了解详情。