SSH Server MCP

Un servidor MCP que proporciona herramientas de gestión remota basadas en SSH, actuando como proxy.

Documentación

SSH MCP Server

Un servidor de Model Context Protocol (MCP) para gestionar servidores Linux a través de SSH. Este servidor proporciona herramientas para ejecutar comandos, gestionar archivos, monitorear servicios y analizar registros en sistemas Linux remotos.

Instalación

Docker (Recomendado)

  1. Copie el archivo de entorno y configure sus credenciales SSH:
cp env.example .env
# Edit .env with your SSH server details
  1. Construya y ejecute con Docker Compose:
docker compose up -d

Instalación Manual

  1. Instale las dependencias:
pip install -r requirements.txt
  1. Establezca las variables de entorno:
export SSH_HOST=your-server.example.com
export SSH_USER=root
export SSH_PASSWORD=your_password
# OR
export SSH_KEY_FILE=/path/to/private/key
  1. Ejecute el servidor:
python -m ssh_mcp_server.server

Integración con AnythingLLM

Agregue la siguiente configuración a su anythingllm_mcp_servers.json:

{
  "mcpServers": {
    "ssh-mcp-server": {
      "name": "SSH MCP Server",
      "type": "streamable",
      "url": "http://ssh-mcp-server:8000/mcp",
      "auth_token": null,
      "enabled": true
    }
  }
}

Configuración

Variables de Entorno

VariableDescripciónPor defecto
SSH_HOSTHostname o IP del servidor de destinolocalhost
SSH_USERNombre de usuario SSHroot
SSH_PASSWORDContraseña SSH-
SSH_KEY_FILERuta a la clave privada SSH-
SSH_PORTPuerto SSH22
SERVER_HOSTDirección de enlace del servidor MCP0.0.0.0
SERVER_PORTPuerto del servidor MCP8000

Autenticación

El servidor admite dos métodos de autenticación:

  1. Autenticación por contraseña: Establezca SSH_PASSWORD en su entorno
  2. Autenticación basada en clave: Establezca SSH_KEY_FILE a la ruta de su clave privada

Uso

Prueba básica de conexión

# Test SSH connection
test_ssh_connection(
    hostname="server.example.com",
    username="root",
    password="your_password"
)

Ejecutar comandos

# Execute a simple command
execute_command("ls -la /var/log")

# Execute with sudo
execute_command("systemctl status nginx", use_sudo=True)

Operaciones de archivos

# Read a file
read_file("/etc/nginx/nginx.conf")

# Write to a file
write_file("/tmp/test.txt", "Hello World!")

# List directory contents
list_directory("/var/log")

Gestión de servicios

# Check service status
get_service_status("nginx")

# Start a service
start_service("nginx")

# Stop a service
stop_service("nginx")

# Restart a service
restart_service("nginx")

Gestión de procesos

# List all processes
list_processes()

# List specific processes
list_processes(filter_by="nginx")

# Kill a process
kill_process("12345", signal="TERM")

Herramientas de red

# Check if port is open
check_port(80)

# Get network connections
get_network_connections()

Análisis de registros

# Tail a log file
tail_log("/var/log/nginx/access.log", lines=100)

# Search in logs
search_log("/var/log/nginx/error.log", "error")

Consideraciones de Seguridad

  • Utilice autenticación basada en clave SSH cuando sea posible
  • Limite el acceso SSH a usuarios e IPs específicos
  • Rote regularmente las claves y contraseñas SSH
  • Monitoree los registros de acceso SSH
  • Use sudo con prudencia y limite los privilegios de sudo

Solución de Problemas

Problemas de Conexión

  1. Autenticación fallida: Verifique el nombre de usuario, la contraseña o el archivo de clave
  2. Conexión rechazada: Verifique que el servicio SSH esté en ejecución y que el puerto sea correcto
  3. Verificación de clave de host: Asegúrese de que la clave de host del servidor sea de confianza

Problemas de Permisos

  1. Acceso a archivo denegado: Verifique los permisos y la propiedad de los archivos
  2. Se requiere sudo: Use use_sudo=True para operaciones privilegiadas
  3. Gestión de servicios: Asegúrese de que el usuario tenga los permisos adecuados de systemd

Problemas de Rendimiento

  1. Comandos lentos: Aumente los valores de tiempo de espera para comandos de larga duración
  2. Tiempos de espera de conexión: Verifique la conectividad de red y la carga del servidor
  3. Uso de recursos: Monitoree los recursos del servidor durante las operaciones

Referencia de la API

El servidor expone las siguientes herramientas MCP:

  • test_ssh_connection: Probar conectividad SSH
  • get_server_info: Obtener información del sistema
  • execute_command: Ejecutar comandos
  • read_file: Leer contenido de archivos
  • write_file: Escribir contenido de archivos
  • list_directory: Listar contenido de directorios
  • get_service_status: Verificar estado del servicio
  • start_service: Iniciar un servicio
  • stop_service: Detener un servicio
  • restart_service: Reiniciar un servicio
  • list_processes: Listar procesos en ejecución
  • kill_process: Terminar un proceso
  • check_port: Verificar estado del puerto
  • get_network_connections: Obtener conexiones de red
  • tail_log: Seguir archivos de registro
  • search_log: Buscar en archivos de registro

Licencia

Este proyecto está licenciado bajo la Licencia MIT.