SSH服务器工具

一个安全的SSH服务器,用于远程访问和交互MCP(Model Context Protocol)工具,提供统一的加密接口连接多个MCP工具提供商。

  • by Machine-To-Machine
  • Python
  • 本地部署
  • 11 星标
  • 更新于
在 GitHub 查看 Machine-To-Machine/m2m-mcp-server-ssh-server

使用说明

MCP服务器SSH服务器

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

特性

  • 安全远程访问:通过SSH远程访问MCP工具
  • 基于密钥的身份验证:支持基于密钥的身份验证
  • 密钥管理API:用于管理SSH密钥的可选HTTP API
  • 服务器聚合:代理并将多个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 Host<br>(Claude/Cursor)
    participant Client as MCP SSH Client
    participant KeySrv as Key Server<br>(HTTP API)
    participant SSHSrv as MCP SSH Server
    participant MCP as MCP Servers

    Note over Client,SSHSrv: Initial Key Exchange & Authentication
    
    Client->>Client: Generate SSH key pair<br>if does not exist
    Client->>KeySrv: GET /server_pub_key
    KeySrv->>Client: Return server's public key
    Client->>Client: Store server key in<br>temporary known_hosts
    Client->>KeySrv: POST /register<br>{client_pub_key: "ssh-ed25519 AAAA..."}
    KeySrv->>SSHSrv: Store client public key<br>in authorized keys
    KeySrv->>Client: {status: "success"}
    
    Note over Client,SSHSrv: Secure SSH Connection
    
    Client->>SSHSrv: SSH handshake with<br>client key authentication
    SSHSrv->>SSHSrv: Verify client key<br>against authorized keys
    SSHSrv->>Client: Authentication successful
    
    Note over Client,SSHSrv: MCP Communication
    
    Host->>Client: JSONRPC request
    Client->>SSHSrv: Forward request<br>over SSH tunnel
    SSHSrv->>MCP: Route request to<br>appropriate MCP server
    MCP->>SSHSrv: Process and return results
    SSHSrv->>Client: Send response over SSH
    Client->>Host: Return JSONRPC response
    
    Note over Client,SSHSrv: Session Management
    
    alt Session Termination
        Host->>Client: Close connection
        Client->>SSHSrv: Terminate SSH session
        SSHSrv->>SSHSrv: Clean up resources
    end

安装

在一个 uv 托管python项目,通过以下方式添加依赖项:

uv add m2m-mcp-server-ssh-server
# For key server functionality, include the optional dependency:
uv add m2m-mcp-server-ssh-server[key-server]

或者,对于使用 pip 对于依赖关系:

pip install m2m-mcp-server-ssh-server
# Or with key server functionality
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)时,您的服务器将可以从任何可以访问您系统的机器访问。确保使用强身份验证,并考虑防火墙等其他安全措施。

密钥管理服务器

您可以选择在SSH服务器旁边运行密钥管理HTTP服务器,以简化客户端密钥注册:

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

这将开始:

  • 端口8022上的SSH服务器
  • 端口8000上的密钥管理HTTP服务器(默认情况下仅限本地主机)

密钥管理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)
  • 媒染剂(>=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  # On Windows: .venv\Scripts\activate
uv pip install -e ".[dev]"

代码质量

# Run linting
uv run ruff check .

# Run formatting check
uv run ruff format --check .

# Run security checks
uv run bandit -r src/

贡献

我们欢迎捐款,以帮助扩大和改进 m2m-mcp-server-ssh-server。无论您是想添加新功能、增强现有功能还是改进文档,您的意见都是有价值的。

欢迎拉取请求!请随时贡献新想法、错误修复或增强功能。

贡献指南

  1. 分叉存储库
  2. 创建要素分支: git checkout -b feature-name
  3. 提交您的更改: git commit -am 'Add some feature'
  4. 推到分支: git push origin feature-name
  5. 提交拉取请求

许可证

MIT许可证-有关详细信息,请参阅许可证文件。

作者

  • 机器对机器