Skip to main content
Glama

MCP 服务器 SSH 客户端

PyPI 版本 Python 版本 许可证:MIT

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

特征

  • 通过 SSH 连接到任何 MCP 服务器

  • 通过安全的 SSH 通道代理所有 MCP 协议命令

  • 支持基于密钥的身份验证

  • 支持 MCP 功能,包括工具、提示和资源

Related MCP server: SSH MCP Server

安装

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 Desktop 设置中。

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

命令行

# Connect to the M2M public demo server with automatic key exchange uv run m2m-mcp-server-ssh-client --host mcp-beta.machinetomachine.ai --use-key-server

2. 本地开发测试

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

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

# Connect to a local MCP SSH server uv run m2m-mcp-server-ssh-client

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

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

# Use the key server for automatic key management (if server has --run-key-server enabled) uv run m2m-mcp-server-ssh-client --use-key-server

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

3.远程服务器连接

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

# Using existing SSH keys uv run m2m-mcp-server-ssh-client --host your-server.example.com --client-key ~/.ssh/your_key --known-hosts ~/.ssh/known_hosts

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

与 AI 平台一起使用

Claude 桌面集成

将其添加到 Claude 桌面设置:

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

MCP 检查器

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

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. 为 SSH 连接创建一个临时的known_hosts文件

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

禁用主机密钥检查

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

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

配置 Claude 桌面

添加到您的 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 服务器 SSH 客户端会与运行 MCP 工具的 MCP 服务器 SSH 服务器(即m2m-mcp-server-ssh-server建立 SSH 连接。然后,它会执行以下操作:

  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: 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

安全注意事项

  • 在生产环境中始终使用主机密钥验证

  • 使用受密码保护的 SSH 密钥来增强安全性

  • 考虑使用专用 SSH 密钥进行 MCP 连接

  • 为 SSH 密钥文件设置适当的权限(600)

  • 在远程服务器上使用专用的、权限有限的用户

常见问题故障排除

连接被拒绝

Error running MCP SSH client: [Errno 111] Connection refused

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

身份验证失败

Error running MCP SSH client: Authentication failed

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

主机密钥验证失败

Error running MCP SSH client: Host key verification failed

解决方案:将主机密钥添加到您的 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 # 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/

调试

您可以使用 MCP 检查器来调试客户端:

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做出贡献。无论您是想添加新功能、增强现有功能还是改进文档,您的意见都非常宝贵。

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

贡献指南

  1. 分叉存储库

  2. 创建功能分支: git checkout -b feature-name

  3. 提交您的更改: git commit -am 'Add some feature'

  4. 推送到分支: git push origin feature-name

  5. 提交拉取请求

执照

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

作者

  • 机器对机器

-
security - not tested
A
license - permissive license
-
quality - not tested

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Machine-To-Machine/m2m-mcp-server-ssh-client'

If you have feedback or need assistance with the MCP directory API, please join our Discord server