MCP Server SSH Server
Machine-To-Machine
README
MCP 服务器 SSH 服务器
一个安全的 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: 将客户端公钥存储在<br>authorized keys 中
KeySrv->>Client: {status: "success"}
Note over Client,SSHSrv: 安全 SSH 连接
Client->>SSHSrv: SSH 握手,使用<br>客户端密钥身份验证
SSHSrv->>SSHSrv: 验证客户端密钥<br>与 authorized keys 对比
SSHSrv->>Client: 身份验证成功
Note over Client,SSHSrv: MCP 通信
Host->>Client: JSONRPC 请求
Client->>SSHSrv: 通过 SSH 隧道<br>转发请求
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 工具快速设置本地服务器:
- 创建一个配置文件 (
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-server
2. 远程托管 (快速设置)
要使您的 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
: authorized keys 文件的路径 (默认: ~/.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
这将启动:
- SSH 服务器在端口 8022 上
- 密钥管理 HTTP 服务器在端口 8000 上 (默认情况下仅限 localhost)
密钥管理 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)
- 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]"
代码质量
# 运行 linting
uv run ruff check .
# 运行格式检查
uv run ruff format --check .
# 运行安全检查
uv run bandit -r src/
贡献
我们欢迎贡献,以帮助扩展和改进 m2m-mcp-server-ssh-server
。 无论您是想添加新功能、增强现有功能还是改进文档,您的投入都很有价值。
欢迎提交 Pull Request! 随时贡献新的想法、错误修复或增强功能。
贡献指南
- Fork 存储库
- 创建一个功能分支:
git checkout -b feature-name
- 提交您的更改:
git commit -am '添加一些功能'
- 推送到分支:
git push origin feature-name
- 提交 Pull Request
许可证
MIT 许可证 - 有关详细信息,请参阅 LICENSE 文件。
作者
- 机器对机器
推荐服务器
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
MCP Package Docs Server
促进大型语言模型高效访问和获取 Go、Python 和 NPM 包的结构化文档,通过多语言支持和性能优化来增强软件开发。
Claude Code MCP
一个实现了 Claude Code 作为模型上下文协议(Model Context Protocol, MCP)服务器的方案,它可以通过标准化的 MCP 接口来使用 Claude 的软件工程能力(代码生成、编辑、审查和文件操作)。
@kazuph/mcp-taskmanager
用于任务管理的模型上下文协议服务器。它允许 Claude Desktop(或任何 MCP 客户端)在基于队列的系统中管理和执行任务。
mermaid-mcp-server
一个模型上下文协议 (MCP) 服务器,用于将 Mermaid 图表转换为 PNG 图像。
Jira-Context-MCP
MCP 服务器向 AI 编码助手(如 Cursor)提供 Jira 工单信息。

Linear MCP Server
一个模型上下文协议(Model Context Protocol)服务器,它与 Linear 的问题跟踪系统集成,允许大型语言模型(LLM)通过自然语言交互来创建、更新、搜索和评论 Linear 问题。

Sequential Thinking MCP Server
这个服务器通过将复杂问题分解为顺序步骤来促进结构化的问题解决,支持修订,并通过完整的 MCP 集成来实现多条解决方案路径。
Curri MCP Server
通过管理文本笔记、提供笔记创建工具以及使用结构化提示生成摘要,从而实现与 Curri API 的交互。