返回市场
设备间-MCP服务器-SSH服务器

设备间-MCP服务器-SSH服务器

作者:Machine-To-Machine10 星标更新:2025-07-03

项目介绍

MCP Server SSH Server

PyPI 版本 Python 版本 许可证: MIT

一个安全的SSH服务器,用于远程访问和与安装在远程位置的MCP(模型上下文协议)工具进行交互。此服务器允许客户端通过统一的安全接口连接到多个MCP工具提供商。

功能

  • 安全远程访问:通过SSH远程访问MCP工具
  • 基于密钥的身份验证:支持基于密钥的身份验证
  • 密钥管理API:可选的HTTP API用于管理SSH密钥
  • 服务器聚合:代理并合并多个MCP服务器到统一的接口
  • MCP支持:兼容MCP功能包括:
    • 提示
    • 资源
    • 工具
    • 日志记录
  • 动态配置:通过简单的JSON配置来配置可用的MCP服务器

认证流程

%%{init: {'theme':'default', 'themeVariables': { 'primaryColor': '#5D8AA8', 'primaryTextColor': '#fff', 'primaryBorderColor': '#1F456E', 'lineColor': '#5D8AA8', 'secondaryColor': '#006400', 'tertiaryColor': '#fff' }}}%%

sequenceDiagram
    participant Host as MCP 主机<br>(Claude/Cursor)
    participant Client as MCP SSH 客户端
    participant KeySrv as 密钥服务器<br>(HTTP API)
    participant SSHSrv as MCP SSH 服务器
    participant MCP as MCP 服务器

    Note over Client,SSHSrv: 初始密钥交换及认证
    
    Client->>Client: 生成SSH密钥对<br>如果不存在
    Client->>KeySrv: GET /server_pub_key
    KeySrv->>Client: 返回服务器公钥
    Client->>Client: 将服务器密钥存储在<br>临时known_hosts中
    Client->>KeySrv: POST /register<br>{client_pub_key: "ssh-ed25519 AAAA..."}
    KeySrv->>SSHSrv: 在授权密钥中存储客户端公钥
    KeySrv->>Client: {status: "success"}
    
    Note over Client,SSHSrv: 安全SSH连接
    
    Client->>SSHSrv: 使用客户端密钥进行SSH握手
    SSHSrv->>SSHSrv: 验证客户端密钥<br>与授权密钥对比
    SSHSrv->>Client: 认证成功
    
    Note over Client,SSHSrv: MCP通信
    
    Host->>Client: JSONRPC请求
    Client->>SSHSrv: 通过SSH隧道转发请求
    SSHSrv->>MCP: 将请求路由到<br>适当的MCP服务器
    MCP->>SSHSrv: 处理并返回结果
    SSHSrv->>Client: 通过SSH发送响应
    Client->>Host: 返回JSONRPC响应
    
    Note over Client,SSHSrv: 会话管理
    
    alt 会话终止
        Host->>Client: 关闭连接
        Client->>SSHSrv: 终止SSH会话
        SSHSrv->>SSHSrv: 清理资源
    end

安装

在一个由uv管理的Python项目中,添加依赖项:

uv add m2m-mcp-server-ssh-server
# 对于密钥服务器功能,包含可选依赖项:
uv add m2m-mcp-server-ssh-server[key-server]

或者,对于使用pip管理依赖项的项目:

pip install m2m-mcp-server-ssh-server
# 或者带有密钥服务器功能
pip install m2m-mcp-server-ssh-server[key-server]

从源码直接安装:

git clone https://github.com/Machine-To-Machine/m2m-mcp-server-ssh-server.git
cd m2m-mcp-server-ssh-server
pip install -e .

在项目内运行服务器:

uv run m2m-mcp-server-ssh-server

常见用例

1. 本地开发环境

快速设置一个本地服务器,使用您喜欢的MCP工具:

  1. 创建配置文件(servers_config.json):
{
  "mcpServers": {
    "HackerNews": {
      "command": "uvx",
      "args": ["mcp-hn"]
    },
    "major-league-baseball": {
      "command": "uvx",
      "args": ["mcp_mlb_statsapi"]
    }
  }
}
  1. 启动服务器,附带密钥管理API以便于客户端连接:
uv run m2m-mcp-server-ssh-server --run-key-server
  1. 使用客户端连接:
uv run m2m-mcp-server-ssh-client --host localhost --port 8022 --use-key-server

2. 远程托管(快速设置)

要使您的MCP工具远程可用:

  1. 在服务器上安装:
uv add m2m-mcp-server-ssh-server[key-server]
  1. 创建包含所需MCP工具的配置文件

  2. 启动服务器绑定到所有接口:

uv run m2m-mcp-server-ssh-server --host 0.0.0.0 --run-key-server --key-server-host  0.0.0.0
  1. 从客户端机器连接:
uv run m2m-mcp-server-ssh-client --host your-server.example.com --port 8022 --use-key-server

更多详细的部署指南,请参阅云部署指南

使用

命令行选项

  • --host:SSH服务器主机地址(默认:127.0.0.1)
  • --port:SSH服务器监听端口(默认:8022)
  • --authorized-clients:授权密钥文件路径(默认:~/.ssh/authorized_keys)
  • --server-key:服务器私钥文件路径(默认:~/.ssh/m2m_mcp_server_ssh_server)
  • --passphrase:私钥的密码短语(可选)
  • --servers-config:服务器配置JSON文件路径(默认:servers_config.json)
  • --log-level:设置日志级别(默认:INFO)
  • --run-key-server:运行HTTP密钥管理服务器
  • --key-server-port:HTTP密钥管理服务器端口(默认:8000)
  • --key-server-host:HTTP密钥管理服务器主机(默认:127.0.0.1)
  • --version:显示版本信息并退出

安全提示:当绑定到所有接口(0.0.0.0)时,您的服务器将可以从能够到达您的系统的任何机器访问。确保使用强身份验证,并考虑额外的安全措施如防火墙。

密钥管理服务器

您可以选择性地运行一个密钥管理HTTP服务器,以简化客户端密钥注册:

uv run m2m-mcp-server-ssh-server --run-key-server

这启动了:

  • SSH服务器在8022端口
  • 密钥管理HTTP服务器在8000端口(默认仅限localhost)

密钥管理API

密钥管理服务器提供以下端点:

  1. POST /register - 注册客户端的公钥

    • 请求正文:{"client_pub_key": "ssh-rsa AAAA..."}
    • 响应:{"status": "success"} 或错误消息
  2. GET /server_pub_key - 获取服务器的公钥

    • 响应:{"server_pub_key": "ssh-ed25519 AAAA..."}
  3. GET /health - 检查服务器健康状态

    • 响应:{"status": "healthy"}

客户端密钥注册示例:

curl -X POST -H "Content-Type: application/json" \
  -d '{"client_pub_key": "ssh-rsa AAAA..."}' \
  http://localhost:8000/register

安全注意事项

  • 默认绑定到localhost(127.0.0.1)以提高安全性
  • 如果未提供,密钥将自动生成并具有安全权限
  • 默认密钥位置是~/.ssh/m2m_mcp_server_ssh_server
  • 私钥使用0o600权限(仅拥有者可读)
  • 公钥使用0o644权限(所有用户可读,拥有者可写)
  • 密钥服务器对API端点使用速率限制
  • 输入验证防止恶意输入

依赖项

  • anyio (>=4.5.0)
  • asyncssh (>=2.20.0)
  • mcp (>=1.1.3)
  • pydantic (>=2.0.0)
  • aiohttp (>=3.11.16) - 可选,用于密钥服务器功能

开发

设置开发环境

git clone https://github.com/Machine-To-Machine/m2m-mcp-server-ssh-server.git
cd m2m-mcp-server-ssh-server
uv venv
source .venv/bin/activate  # 在Windows上:.venv\Scripts\activate
uv pip install -e ".[dev]"

代码质量

# 运行代码检查
uv run ruff check .

# 运行格式检查
uv run ruff format --check .

# 运行安全检查
uv run bandit -r src/

贡献

我们欢迎贡献,帮助扩展和改进m2m-mcp-server-ssh-server。无论您想添加新功能、增强现有功能或改进文档,您的意见都是宝贵的。

欢迎提交拉取请求!请自由贡献新想法、修复错误或增强功能。

贡献指南

  1. 分叉仓库
  2. 创建功能分支:git checkout -b feature-name
  3. 提交更改:git commit -am '添加某些功能'
  4. 推送到分支:git push origin feature-name
  5. 提交拉取请求

许可证

MIT 许可证 - 详情见LICENSE文件。

作者

  • Machine To Machine