s

ssh

@mingyang91/ssh
0 Stars 377 次浏览 mingyang91 更新于 2026-08-23

SSH

MCP 服务配置

复制以下 JSON 到 OPClaw 或其他 MCP 客户端的配置文件中即可使用

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

服务介绍

SSH-MCP 服务器

Crates.io 版本
Docker 镜像版本

一个用 Rust 实现的 SSH 客户端服务器,集成了模型上下文协议(MCP),允许大型语言模型(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 处理程序,允许 LLMs 通过您的 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
drwxr-xr-x  5 user group 4096 Jan 1 12:00 .
drwxr-xr-x 25 user group 4096 Jan 1 12:00 ..
-rw-r--r--  1 user group  142 Jan 1 12:00 file.txt
",
  "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"
  }
}

响应:

"Session c8a3b2e1-4f5d-6e7c-8a9b-0c1d2e3f4a5b disconnected successfully"

列出所有活动会话

{
  "command": "ssh_list_sessions"
}

响应:

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

配置

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

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

功能配置

该项目使用 Cargo 特性来启用或禁用某些功能:

特性 描述 默认值
port_forward 启用 SSH 端口转发支持 已启用

要构建不包含端口转发的功能:

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

贡献

欢迎贡献!请随时提交 Pull Request。

CI/CD 流水线

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

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

许可证

本项目根据 MIT 许可证授权 - 详情请参阅 LICENSE 文件。

相关 MCP 服务