MCP服务器SSH服务器
](https://pypi.org/project/m2m-mcp-server-ssh-server/) ](https://pypi.org/project/m2m-mcp-server-ssh-server/) 
一个安全的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
(Claude/Cursor)
participant Client as MCP SSH Client
participant KeySrv as Key Server
(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
if does not exist
Client->>KeySrv: GET /server_pub_key
KeySrv->>Client: Return server's public key
Client->>Client: Store server key in
temporary known_hosts
Client->>KeySrv: POST /register
{client_pub_key: "ssh-ed25519 AAAA..."}
KeySrv->>SSHSrv: Store client public key
in authorized keys
KeySrv->>Client: {status: "success"}
Note over Client,SSHSrv: Secure SSH Connection
Client->>SSHSrv: SSH handshake with
client key authentication
SSHSrv->>SSHSrv: Verify client key
against authorized keys
SSHSrv->>Client: Authentication successful
Note over Client,SSHSrv: MCP Communication
Host->>Client: JSONRPC request
Client->>SSHSrv: Forward request
over SSH tunnel
SSHSrv->>MCP: Route request to
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工具快速设置本地服务器:
- 创建配置文件(
servers_config.json):
{
"mcpServers": {
"HackerNews": {
"command": "uvx",
"args": ["mcp-hn"]
},
"major-league-baseball": {
"command": "uvx",
"args": ["mcp_mlb_statsapi"]
}
}
}- 使用密钥管理API启动服务器,以便更轻松地连接客户端:
uv run m2m-mcp-server-ssh-server --run-key-server- 使用客户端连接:
uv run m2m-mcp-server-ssh-client --host localhost --port 8022 --use-key-server2.远程托管(快速设置)
要使您的MCP工具远程可用,请执行以下操作:
- 在您的服务器上安装:
uv add m2m-mcp-server-ssh-server[key-server]- 使用所需的MCP工具创建配置文件
- 启动与所有接口的服务器绑定:
uv run m2m-mcp-server-ssh-server --host 0.0.0.0 --run-key-server --key-server-host 0.0.0.0- 从客户端计算机连接:
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
密钥管理服务器提供以下端点:
POST /register-注册客户端的公钥
- 请求正文: {"client_pub_key": "ssh-rsa AAAA..."} - 答复: {"status": "success"} 或错误消息
GET /server_pub_key-获取服务器的公钥
- 答复: {"server_pub_key": "ssh-ed25519 AAAA..."}
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。无论您是想添加新功能、增强现有功能还是改进文档,您的意见都是有价值的。
欢迎拉取请求!请随时贡献新想法、错误修复或增强功能。
贡献指南
- 分叉存储库
- 创建要素分支:
git checkout -b feature-name - 提交您的更改:
git commit -am 'Add some feature' - 推到分支:
git push origin feature-name - 提交拉取请求
许可证
MIT许可证-有关详细信息,请参阅许可证文件。
作者
- 机器对机器
