返回市场
m2m-mcp服务器-ssh客户端

m2m-mcp服务器-ssh客户端

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

项目介绍

MCP Server SSH 客户端

PyPI 版本 Python 版本 许可证: MIT

一个模型上下文协议服务器(远程SSH客户端),通过SSH连接到远程MCP服务器。此客户端允许访问并利用托管在远程服务器上的MCP工具,提供安全的MCP通信通道。

<a href="https://glama.ai/mcp/servers/@Machine-To-Machine/m2m-mcp-server-ssh-client"> <img width="380" height="200" src="https://gips1.baidu.com/it/u=2932959161,1882103846&fm=3081&app=3081&f=PNG?w=760&h=400" /> </a>

功能

  • 通过SSH连接到任何MCP服务器
  • 通过安全的SSH通道代理所有MCP协议命令
  • 支持基于密钥的身份验证
  • 支持包括工具、提示和资源在内的MCP功能

安装

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

uv add m2m-mcp-server-ssh-client

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

pip install m2m-mcp-server-ssh-client

从源码安装:

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

在项目中运行服务器:

uv run m2m-mcp-server-ssh-client

常见用例

1. 快速开始与演示服务器

我们维护了一个公共演示服务器,其中已经配置了各种MCP工具,随时可以使用。(该服务器将在我们发布开放、去中心化的注册表之前一直可用。)

这个演示服务器包含了多个MCP服务器,包括HackerNews、MLB Stats API和Formula 1 API工具供您实验。

Claude

要将Claude连接到此服务器,只需在Claude Desktop设置中添加以下内容。

"mcpServers": {
  "remote-mcp-tools": {
    "command": "uvx",
    "args": [
      "m2m-mcp-server-ssh-client", 
      "--host", "mcp-beta.machinetomachine.ai", 
      "--port", "8022", 
      "--use-key-server"
    ]
  }
}

命令行

# 使用自动密钥交换连接到M2M公共演示服务器
uv run m2m-mcp-server-ssh-client --host mcp-beta.machinetomachine.ai --use-key-server

2. 本地开发测试

要设置自己的SSH服务器,请参阅m2m-mcp-server-ssh-server

使用自己的MCP工具进行本地测试:

# 连接到本地MCP SSH服务器
uv run m2m-mcp-server-ssh-client

上述命令将尝试连接到监听8022端口的本地SSH服务器。

在本地测试时,可以通过使用密钥服务器简化密钥交换:

# 使用密钥服务器进行自动密钥管理(如果服务器启用了--run-key-server)
uv run m2m-mcp-server-ssh-client --use-key-server

上述命令将尝试使用运行在8000端口上的密钥服务器。

3. 远程服务器连接

连接到您自己托管的MCP服务器:

# 使用现有的SSH密钥
uv run m2m-mcp-server-ssh-client --host your-server.example.com --client-key ~/.ssh/your_key --known-hosts ~/.ssh/known_hosts

您可以通过在远程服务器上运行密钥服务器并在客户端中配置它来简化密钥交换。

与AI平台集成

Claude Desktop 集成

在Claude Desktop设置中添加以下内容:

"mcpServers": {
  "remote-mcp-tools": {
    "command": "uvx",
    "args": [
      "m2m-mcp-server-ssh-client", 
      "--host", "mcp-beta.machinetomachine.ai", 
      "--port", "8022", 
      "--use-key-server"
    ]
  }
}

MCP Inspector

用于调试或探索可用工具:

npx @modelcontextprotocol/inspector -- uvx m2m-mcp-server-ssh-client --host mcp-beta.machinetomachine.ai --port 8022 --use-key-server

使用方法

命令行选项

  • --host: 远程SSH服务器主机(默认:"localhost")
  • --port: 远程SSH服务器端口(默认:8022)
  • --username: SSH用户名(默认:"mcp")
  • --client-key: 客户端私钥文件(默认:"~/.ssh/m2m_mcp_server_ssh_client")
  • --known-hosts: 已知主机文件路径(默认:"~/.ssh/known_hosts")
  • --passphrase: 私钥的密码短语(默认:无)
  • --disable-host-key-checking: 跳过服务器签名验证(默认:False)
  • --log-level: 设置日志级别(默认:INFO)

详细示例

基本连接到远程服务器

连接到运行在8022端口上的远程MCP服务器(SSH服务器):

uvx m2m-mcp-server-ssh-client --host mcp.example.com

使用自定义SSH密钥

指定特定的SSH密钥进行身份验证:

uvx m2m-mcp-server-ssh-client --host mcp.example.com --client-key ~/.ssh/mcp_custom_key

如果您的密钥受密码短语保护:

uvx m2m-mcp-server-ssh-client --host mcp.example.com --client-key ~/.ssh/mcp_custom_key --passphrase "your-passphrase"

调试模式以解决故障

启用详细的日志记录以解决连接问题:

uvx m2m-mcp-server-ssh-client --host mcp.example.com --log-level DEBUG

密钥服务器集成

MCP SSH客户端可以使用密钥服务器进行动态密钥交换和验证:

uvx m2m-mcp-server-ssh-client --host mcp.example.com --use-key-server

当使用密钥服务器时:

  1. 客户端从http://host:key-server-port/server_pub_key获取服务器的公钥。
  2. 客户端在http://host:key-server-port/register向服务器注册其公钥。
  3. 创建一个临时的known_hosts文件用于SSH连接。

此功能与--known-hosts--disable-host-key-checking互斥。

禁用主机密钥检查

⚠️ 安全警告: 使用--disable-host-key-checking会使您的连接容易受到中间人攻击。仅在可信网络或开发/测试环境中使用此选项。

uvx m2m-mcp-server-ssh-client --host localhost --disable-host-key-checking

配置Claude Desktop

在您的Claude设置中添加以下内容:

"mcpServers": {
  "remote-servers": {
    "command": "uvx",
    "args": [
      "m2m-mcp-server-ssh-client", 
      "--host", "example.com", 
      "--port", "8022", 
      "--username", "mcp"
    ]
  }
}

为了更安全的配置,使用特定的密钥:

"mcpServers": {
  "remote-servers": {
    "command": "uvx",
    "args": [
      "m2m-mcp-server-ssh-client",
      "--host", "mcp-server.example.com",
      "--port", "8022",
      "--username", "claude-mcp",
      "--client-key", "~/.ssh/claude_mcp_key",
      "--known-hosts", "~/.ssh/mcp_remote_server"
    ]
  }
}

工作原理

MCP Server SSH客户端通过SSH连接到运行MCP Server SSH Server的远程服务器,该服务器托管MCP工具,即m2m-mcp-server-ssh-server。然后:

  1. 创建一个本地代理服务器,镜像远程MCP服务器的功能。
  2. 通过SSH连接将所有MCP请求转发到远程服务器。
  3. 将来自远程服务器的响应返回给本地客户端。

这使您可以像它们已安装在本地一样使用远程机器上的工具。

认证流程

%%{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: 初始密钥交换及认证
    
    Client->>Client: 生成SSH密钥对<br>如果不存在
    Client->>KeySrv: GET /server_pub_key
    KeySrv->>Client: 返回服务器的公钥
    Client->>Client: 在临时known_hosts中存储服务器密钥
    Client->>KeySrv: POST /register<br>{client_pub_key: "ssh-ed25519 AAAA..."}
    KeySrv->>SSHSrv: 存储客户端公钥<br>在授权密钥中
    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

安全注意事项

  • 生产环境中始终使用主机密钥验证
  • 使用带有密码短语保护的SSH密钥以增强安全性
  • 考虑为MCP连接使用专用的SSH密钥
  • 为您的SSH密钥文件设置适当的权限(600)
  • 在远程服务器上使用具有有限特权的专用用户

常见问题排查

连接被拒绝

运行MCP SSH客户端时出错: [Errno 111] 连接被拒绝

解决方案: 验证主机和端口是否正确,并确保SSH服务正在运行。

认证失败

运行MCP SSH客户端时出错: 认证失败

解决方案: 检查密钥文件路径。确保远程服务器已安装您的公钥。

主机密钥验证失败

运行MCP SSH客户端时出错: 主机密钥验证失败

解决方案: 将主机密钥添加到您的known_hosts文件中,或使用--disable-host-key-checking(仅限测试)。

依赖项

  • anyio (>=4.5.0)
  • asyncssh (>=2.20.0)
  • mcp (>=1.1.3)
  • pydantic (>=2.0.0)

开发

设置开发环境

git clone https://github.com/Machine-To-Machine/m2m-mcp-server-ssh-client.git
cd m2m-mcp-server--ssh-client
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/

调试

您可以使用MCP inspector来调试客户端:

npx @modelcontextprotocol/inspector uvx m2m-mcp-server-ssh-client --host example.com

对于高级调试,使用以下工作流程:

  1. 使用--log-level DEBUG启动客户端。
  2. 检查SSH连接参数和握手过程。
  3. 如果使用自定义密钥,验证正确的路径和权限。
  4. 使用ssh -v直接测试基本连通性。

贡献

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

欢迎提交拉取请求!请随意贡献新想法、错误修复或改进。

贡献指南

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

许可证

MIT 许可证 - 查看LICENSE文件了解详情。

作者

  • Machine To Machine