SSH Server MCP

Um servidor MCP que fornece ferramentas de gerenciamento remoto baseadas em SSH, atuando como proxy.

Documentação

Servidor MCP SSH

Um servidor Model Context Protocol (MCP) para gerenciar servidores Linux via SSH. Este servidor fornece ferramentas para executar comandos, gerenciar arquivos, monitorar serviços e analisar logs em sistemas Linux remotos.

Instalação

Docker (Recomendado)

  1. Copie o arquivo de ambiente e configure suas credenciais SSH:
cp env.example .env
# Edit .env with your SSH server details
  1. Compile e execute com Docker Compose:
docker compose up -d

Instalação Manual

  1. Instale as dependências:
pip install -r requirements.txt
  1. Defina as variáveis de ambiente:
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. Execute o servidor:
python -m ssh_mcp_server.server

Integração com AnythingLLM

Adicione a seguinte configuração ao seu 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
    }
  }
}

Configuração

Variáveis de Ambiente

VariávelDescriçãoPadrão
SSH_HOSTHostname ou IP do servidor de destinolocalhost
SSH_USERNome de usuário SSHroot
SSH_PASSWORDSenha SSH-
SSH_KEY_FILECaminho para a chave privada SSH-
SSH_PORTPorta SSH22
SERVER_HOSTEndereço de bind do servidor MCP0.0.0.0
SERVER_PORTPorta do servidor MCP8000

Autenticação

O servidor suporta dois métodos de autenticação:

  1. Autenticação por Senha: Defina SSH_PASSWORD no seu ambiente
  2. Autenticação por Chave: Defina SSH_KEY_FILE para o caminho da sua chave privada

Uso

Teste Básico de Conexão

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

Executar Comandos

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

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

Operações com Arquivos

# 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")

Gerenciamento de Serviços

# 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")

Gerenciamento de Processos

# List all processes
list_processes()

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

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

Ferramentas de Rede

# Check if port is open
check_port(80)

# Get network connections
get_network_connections()

Análise de Logs

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

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

Considerações de Segurança

  • Use autenticação por chave SSH quando possível
  • Limite o acesso SSH a usuários e IPs específicos
  • Rotacione regularmente chaves e senhas SSH
  • Monitore os logs de acesso SSH
  • Use sudo com moderação e limite os privilégios de sudo

Solução de Problemas

Problemas de Conexão

  1. Falha na Autenticação: Verifique nome de usuário, senha ou arquivo de chave
  2. Conexão Recusada: Verifique se o serviço SSH está em execução e se a porta está correta
  3. Verificação da Chave do Host: Garanta que a chave do host do servidor seja confiável

Problemas de Permissão

  1. Acesso a Arquivo Negado: Verifique permissões e propriedade dos arquivos
  2. Sudo Necessário: Use use_sudo=True para operações privilegiadas
  3. Gerenciamento de Serviços: Garanta que o usuário tenha permissões apropriadas do systemd

Problemas de Desempenho

  1. Comandos Lentos: Aumente os valores de timeout para comandos de longa duração
  2. Timeouts de Conexão: Verifique a conectividade de rede e a carga do servidor
  3. Uso de Recursos: Monitore os recursos do servidor durante as operações

Referência da API

O servidor expõe as seguintes ferramentas MCP:

  • test_ssh_connection: Testar conectividade SSH
  • get_server_info: Obter informações do sistema
  • execute_command: Executar comandos
  • read_file: Ler conteúdo de arquivos
  • write_file: Escrever conteúdo em arquivos
  • list_directory: Listar conteúdo de diretórios
  • get_service_status: Verificar status do serviço
  • start_service: Iniciar um serviço
  • stop_service: Parar um serviço
  • restart_service: Reiniciar um serviço
  • list_processes: Listar processos em execução
  • kill_process: Encerrar um processo
  • check_port: Verificar status da porta
  • get_network_connections: Obter conexões de rede
  • tail_log: Acompanhar arquivos de log
  • search_log: Pesquisar arquivos de log

Licença

Este projeto é licenciado sob a Licença MIT.