SSH客户端服务器

一个集成了模型上下文协议(MCP)的SSH客户端服务器,允许大型语言模型(LLM)连接SSH服务器并利用SSH功能。

  • by mingyang91
  • Rust
  • 本地部署
  • 5 星标
  • 更新于
在 GitHub 查看 mingyang91/ssh-mcp

使用说明

SSH-MCP服务器

SSH客户端服务器的Rust实现,集成了模型上下文协议(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协议支持:内置诗意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 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": "Successfully connected to user@example.com: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_PORT MCP服务器的端口 8000
RUST_LOG 日志记录级别 信息

功能配置

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

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

要构建而不进行端口转发,请执行以下操作:

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

贡献

欢迎投稿!请随时提交拉取请求。

CI/CD管道

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

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

许可证

此项目根据MIT许可证获得许可-有关详细信息,请参阅许可证文件。