mcpField
S
Ssh

Ssh

本地服务
github.com/mingyang91开发工具676 周前更新

关于 Ssh

Ssh 是一个以 Rust 实现的 SSH 客户端 MCP 服务,面向需要让 LLM 通过 MCP 管理远程 SSH 会话的用户。它支持持久会话、远程命令执行和端口转发。

主要功能

  1. 01连接 SSH 服务并管理会话
  2. 02在远程主机执行命令
  3. 03配置 SSH 端口转发
  4. 04列出和断开活动会话

适用场景

  1. 01通过 MCP 建立 SSH 连接
  2. 02在远程主机运行命令
  3. 03将本地端口转发到远程服务

MCP 相关

该 MCP 服务向 MCP 客户端提供 SSH 连接、命令执行、会话管理和端口转发能力,并可通过 Docker 或 Cargo 安装。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"ssh-mcp-mingyang91": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ssh-mcp-stdio"
]
}
}
}
启动命令docker run -i --rm ssh-mcp-stdio

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
ocissh-mcp-stdio

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

SSH-MCP 服务端

Crates.io 版本 Docker 镜像版本

这是一个使用 Rust 实现的 SSH 客户端服务端,集成了模型上下文协议(MCP),使大模型(LLM)能够连接到 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!

# Pull the pre-built image from Docker Hub
docker pull mingyang91/ssh-mcp

# Run the server
docker run -p 8000:8000 mingyang91/ssh-mcp

或者自行构建镜像:

# Build the Docker image
docker build -t ssh-mcp .

# Run the server
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 处理程序,使大模型能够通过 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 Agent 认证
{
  "command": "ssh_connect",
  "params": {
    "address": "example.com:22",
    "username": "user"
  }
}

响应:

{
  "session_id": "c8a3b2e1-4f5d-6e7c-8a9b-0c1d2e3f4a5b",
  "message": "Successfully connected to [email protected]:22",
  "authenticated": true
}

如果连接失败:

{
  "error": "Failed to connect: Connection refused"
}
执行命令
{
  "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"
  }
}

响应:

"Session c8a3b2e1-4f5d-6e7c-8a9b-0c1d2e3f4a5b disconnected successfully"
列出所有活动会话
{
  "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

贡献

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

CI/CD 流水线

本项目使用 GitHub Actions 进行持续集成与部署:

  • 所有 PR 以及向 main 提交的更改都会自动测试
  • 带标签的发行版(以 'v' 开头)会自动发布到 crates.io
  • Docker 镜像会自动构建并推送到 Docker Hub
    • main 分支使用 latest 标签
    • 语义化版本发行版使用版本标签(v1.0.0、v1.0 等)
  • 创建新发行版时,请确保 Cargo.toml 中的版本与标签一致(例如 v0.1.0)
  • 你需要在 GitHub 仓库设置中配置 CARGO_REGISTRY_TOKEN、DOCKERHUB_USERNAME 和 DOCKERHUB_TOKEN 机密

许可证

本项目采用 MIT 许可证,详情请参阅 LICENSE 文件。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。