Cliente SSH del servidor MCP
Un servidor de protocolo de contexto de modelo (cliente SSH remoto) que se conecta a servidores MCP remotos mediante SSH. Este cliente permite acceder y utilizar herramientas MCP alojadas en servidores remotos, proporcionando un canal seguro para la comunicación MCP.
Características
Conéctese a cualquier servidor MCP a través de SSH
Proxy de todos los comandos del protocolo MCP a través de un canal SSH seguro
Compatibilidad con autenticación basada en clave
Compatibilidad con las capacidades de MCP, incluidas herramientas, indicaciones y recursos
Related MCP server: SSH MCP Server
Instalación
En un proyecto de Python administrado uv , agregue dependencias mediante:
uv add m2m-mcp-server-ssh-clientAlternativamente, para proyectos que utilizan pip para dependencias:
pip install m2m-mcp-server-ssh-clientPara instalar directamente desde la fuente:
git clone https://github.com/Machine-To-Machine/m2m-mcp-server-ssh-client.git
cd m2m-mcp-server-ssh-client
pip install -e .Para ejecutar el servidor dentro de su proyecto:
uv run m2m-mcp-server-ssh-clientCasos de uso comunes
1. Inicio rápido con el servidor de demostración
Mantenemos un servidor de demostración público con varias herramientas MCP ya configuradas y listas para usar. (Este servidor estará disponible hasta que lancemos nuestro registro abierto y descentralizado).
Este servidor de demostración tiene varios servidores MCP, incluidos HackerNews, MLB Stats API y herramientas API de Fórmula 1 para que puedas experimentar con ellos.
Claude
Para conectar a Claude a este servidor, simplemente agregue lo siguiente a la configuración de Claude Desktop.
"mcpServers": {
"remote-mcp-tools": {
"command": "uvx",
"args": [
"m2m-mcp-server-ssh-client",
"--host", "mcp-beta.machinetomachine.ai",
"--port", "8022",
"--use-key-server"
]
}
}Línea de comandos
# 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-server2. Pruebas de desarrollo local
Para configurar su propio servidor SSH, consulte m2m-mcp-server-ssh-server .
Para realizar pruebas locales con sus propias herramientas MCP:
# Connect to a local MCP SSH server
uv run m2m-mcp-server-ssh-clientEl comando anterior intentará conectarse a un servidor SSH local que escucha en el puerto 8022.
Al realizar pruebas locales, puede simplificar el intercambio de claves utilizando el servidor de claves:
# Use the key server for automatic key management (if server has --run-key-server enabled)
uv run m2m-mcp-server-ssh-client --use-key-serverEl comando anterior intentará utilizar el servidor de claves que se ejecuta en el puerto 8000.
3. Conexión al servidor remoto
Conéctese a su propio servidor MCP alojado:
# 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_hostsPuede simplificar el intercambio de claves ejecutando el servidor de claves en su servidor remoto y configurándolo en el cliente.
Uso con plataformas de IA
Integración de escritorio de Claude
Agregue esto a la configuración de Claude Desktop:
"mcpServers": {
"remote-mcp-tools": {
"command": "uvx",
"args": [
"m2m-mcp-server-ssh-client",
"--host", "mcp-beta.machinetomachine.ai",
"--port", "8022",
"--use-key-server"
]
}
}Inspector de MCP
Para depurar o explorar las herramientas disponibles:
npx @modelcontextprotocol/inspector -- uvx m2m-mcp-server-ssh-client --host mcp-beta.machinetomachine.ai --port 8022 --use-key-serverUso
Opciones de línea de comandos
--host: host del servidor SSH remoto (predeterminado: "localhost")--port: Puerto del servidor SSH remoto (predeterminado: 8022)--username: nombre de usuario SSH (predeterminado: "mcp")--client-key: archivo de clave privada del cliente (predeterminado: "~/.ssh/m2m_mcp_server_ssh_client")--known-hosts: Ruta al archivo de hosts conocidos (predeterminado: "~/.ssh/known_hosts")--passphrase: Frase de contraseña para la clave privada (predeterminado: Ninguna)--disable-host-key-checking: omite la verificación de la firma del servidor (predeterminado: Falso)--log-level: establece el nivel de registro (predeterminado: INFO)
Ejemplos detallados
Conexión básica a un servidor remoto
Conectarse a un servidor MCP remoto (servidor SSH) que se ejecuta en el puerto 8022:
uvx m2m-mcp-server-ssh-client --host mcp.example.comUso de una clave SSH personalizada
Especifique una clave SSH particular para la autenticación:
uvx m2m-mcp-server-ssh-client --host mcp.example.com --client-key ~/.ssh/mcp_custom_keySi su clave está protegida con contraseña:
uvx m2m-mcp-server-ssh-client --host mcp.example.com --client-key ~/.ssh/mcp_custom_key --passphrase "your-passphrase"Modo de depuración para la resolución de problemas
Habilitar el registro detallado para solucionar problemas de conexión:
uvx m2m-mcp-server-ssh-client --host mcp.example.com --log-level DEBUGIntegración de servidores clave
El cliente SSH de MCP puede utilizar un servidor de claves para el intercambio y verificación de claves dinámicas:
uvx m2m-mcp-server-ssh-client --host mcp.example.com --use-key-serverAl utilizar un servidor de claves:
El cliente obtiene la clave pública del servidor desde
http://host:key-server-port/server_pub_keyEl cliente registra su clave pública con el servidor en
http://host:key-server-port/registerSe crea un archivo
known_hoststemporal para la conexión SSH
Esta característica es mutuamente excluyente con --known-hosts y --disable-host-key-checking .
Deshabilitar la comprobación de la clave del host
⚠️ Advertencia de seguridad : Usar
--disable-host-key-checkinghace que tu conexión sea vulnerable a ataques de intermediario. Usa esta opción solo en redes confiables o para fines de desarrollo y pruebas.
uvx m2m-mcp-server-ssh-client --host localhost --disable-host-key-checkingConfigurar para Claude Desktop
Añade a tu configuración de Claude:
"mcpServers": {
"remote-servers": {
"command": "uvx",
"args": [
"m2m-mcp-server-ssh-client",
"--host", "example.com",
"--port", "8022",
"--username", "mcp"
]
}
}Para una configuración más segura con una clave específica:
"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"
]
}
}Cómo funciona
El cliente SSH del servidor MCP establece una conexión SSH con un servidor remoto que ejecuta el servidor SSH del servidor MCP para herramientas MCP ( m2m-mcp-server-ssh-server . A continuación:
Crea un servidor proxy local que refleja las capacidades del servidor MCP remoto
Reenvía todas las solicitudes MCP al servidor remoto a través de la conexión SSH
Devuelve respuestas del servidor remoto al cliente local
Esto le permite utilizar herramientas que se ejecutan en máquinas remotas como si estuvieran instaladas localmente.
Flujo de autenticación
%%{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
endConsideraciones de seguridad
Utilice siempre la verificación de clave de host en entornos de producción
Utilice claves SSH protegidas con contraseña para una mayor seguridad
Considere usar claves SSH dedicadas para conexiones MCP
Establezca los permisos adecuados (600) para sus archivos de clave SSH
Utilice un usuario dedicado con privilegios limitados en el servidor remoto
Solución de problemas comunes
Conexión rechazada
Error running MCP SSH client: [Errno 111] Connection refusedSolución : Verifique que el host y el puerto sean correctos y que el servicio SSH esté ejecutándose.
Error de autenticación
Error running MCP SSH client: Authentication failedSolución : Verifique la ruta del archivo de clave. Asegúrese de que el servidor remoto tenga instalada su clave pública.
Error en la verificación de la clave del host
Error running MCP SSH client: Host key verification failedSolución : agregue la clave de host a su archivo known_hosts o use --disable-host-key-checking (sólo para pruebas).
Dependencias
anyio (>=4.5.0)
asyncssh (>=2.20.0)
mcp (>=1.1.3)
pydantic (>=2.0.0)
Desarrollo
Configurar el entorno de desarrollo
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]"Calidad del código
# Run linting
uv run ruff check .
# Run formatting check
uv run ruff format --check .
# Run security checks
uv run bandit -r src/Depuración
Puede utilizar el inspector MCP para depurar el cliente:
npx @modelcontextprotocol/inspector uvx m2m-mcp-server-ssh-client --host example.comPara una depuración avanzada, utilice el siguiente flujo de trabajo:
Inicie el cliente con
--log-level DEBUGVerifique los parámetros de conexión SSH y el proceso de protocolo de enlace
Si utiliza claves personalizadas, verifique que las rutas y los permisos sean correctos
Utilice
ssh -vdirectamente para probar primero la conectividad básica
Contribuyendo
Agradecemos sus contribuciones para ampliar y mejorar m2m-mcp-server-ssh-client . Ya sea que desee añadir nuevas funciones, mejorar la funcionalidad existente o mejorar la documentación, su opinión es muy valiosa.
¡Aceptamos solicitudes de incorporación de cambios! Siéntete libre de contribuir con nuevas ideas, correcciones de errores o mejoras.
Pautas de contribución
Bifurcar el repositorio
Crear una rama de características:
git checkout -b feature-nameConfirme sus cambios:
git commit -am 'Add some feature'Empujar a la rama:
git push origin feature-nameEnviar una solicitud de extracción
Licencia
Licencia MIT: consulte el archivo LICENCIA para obtener más detalles.
Autores
De máquina a máquina