一个安全的SSH服务器,用于远程访问和与安装在远程位置的MCP(模型上下文协议)工具进行交互。此服务器允许客户端通过统一的安全接口连接到多个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
快速设置一个本地服务器,使用您喜欢的MCP工具:
servers_config.json):{
"mcpServers": {
"HackerNews": {
"command": "uvx",
"args": ["mcp-hn"]
},
"major-league-baseball": {
"command": "uvx",
"args": ["mcp_mlb_statsapi"]
}
}
}
uv run m2m-mcp-server-ssh-server --run-key-server
uv run m2m-mcp-server-ssh-client --host localhost --port 8022 --use-key-server
要使您的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)时,您的服务器将可以从能够到达您的系统的任何机器访问。确保使用强身份验证,并考虑额外的安全措施如防火墙。
您可以选择性地运行一个密钥管理HTTP服务器,以简化客户端密钥注册:
uv run m2m-mcp-server-ssh-server --run-key-server
这启动了:
密钥管理服务器提供以下端点:
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
~/.ssh/m2m_mcp_server_ssh_servergit 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。无论您想添加新功能、增强现有功能或改进文档,您的意见都是宝贵的。
欢迎提交拉取请求!请自由贡献新想法、修复错误或增强功能。
git checkout -b feature-namegit commit -am '添加某些功能'git push origin feature-nameMIT 许可证 - 详情见LICENSE文件。