MCP Server SSH Client
Um servidor MCP local que se conecta de forma segura a servidores remotos via SSH, atuando como um proxy para comandos MCP.
Documentação
MCP Server SSH Client
Um servidor Model Context Protocol (cliente SSH remoto) que se conecta a servidores MCP remotos via SSH. Este cliente permite acessar e utilizar ferramentas MCP hospedadas em servidores remotos, fornecendo um canal seguro para comunicação MCP.
Recursos
- Conecte-se a qualquer servidor MCP via SSH
- Encaminhe todos os comandos do protocolo MCP através de um canal SSH seguro
- Suporte para autenticação baseada em chave
- Suporte para recursos MCP, incluindo ferramentas, prompts e recursos
Instalação
Em um projeto Python gerenciado por uv, adicione às dependências:
uv add m2m-mcp-server-ssh-client
Alternativamente, para projetos que usam pip para dependências:
pip install m2m-mcp-server-ssh-client
Para instalar diretamente a partir do código-fonte:
git clone https://github.com/Machine-To-Machine/m2m-mcp-server-ssh-client.git
cd m2m-mcp-server-ssh-client
pip install -e .
Para executar o servidor dentro do seu projeto:
uv run m2m-mcp-server-ssh-client
Casos de Uso Comuns
1. Início Rápido com Servidor de Demonstração
Mantemos um servidor de demonstração público com várias ferramentas MCP já configuradas e prontas para uso. (Este servidor estará disponível até lançarmos nosso registro descentralizado aberto.)
Este servidor de demonstração possui vários servidores MCP, incluindo HackerNews, MLB Stats API e ferramentas da API de Fórmula 1 para você experimentar.
Claude
Para conectar o Claude a este servidor, basta adicionar o seguinte às configurações do Claude Desktop.
"mcpServers": {
"remote-mcp-tools": {
"command": "uvx",
"args": [
"m2m-mcp-server-ssh-client",
"--host", "mcp-beta.machinetomachine.ai",
"--port", "8022",
"--use-key-server"
]
}
}
Linha de comando
# 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. Testes de Desenvolvimento Local
Para configurar seu próprio servidor SSH, consulte m2m-mcp-server-ssh-server.
Para testes locais com suas próprias ferramentas MCP:
# Connect to a local MCP SSH server
uv run m2m-mcp-server-ssh-client
O comando acima tentará se conectar a um servidor SSH local escutando na porta 8022.
Ao testar localmente, você pode simplificar a troca de chaves usando o servidor de chaves:
# 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
O comando acima tentará usar o servidor de chaves executando na porta 8000.
3. Conexão com Servidor Remoto
Conecte-se ao seu próprio servidor MCP hospedado:
# 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
Você pode simplificar a troca de chaves executando o servidor de chaves no seu servidor remoto e configurando-o no cliente.
Uso com Plataformas de IA
Integração com Claude Desktop
Adicione isto às configurações do 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
Para depuração ou exploração das ferramentas disponíveis:
npx @modelcontextprotocol/inspector -- uvx m2m-mcp-server-ssh-client --host mcp-beta.machinetomachine.ai --port 8022 --use-key-server
Uso
Opções de Linha de Comando
--host: Host do servidor SSH remoto (padrão: "localhost")--port: Porta do servidor SSH remoto (padrão: 8022)--username: Nome de usuário SSH (padrão: "mcp")--client-key: Arquivo de chave privada do cliente (padrão: "~/.ssh/m2m_mcp_server_ssh_client")--known-hosts: Caminho para o arquivo de hosts conhecidos (padrão: "~/.ssh/known_hosts")--passphrase: Frase secreta para a chave privada (padrão: None)--disable-host-key-checking: Ignorar verificação de assinatura do servidor (padrão: False)--log-level: Definir nível de registro (log) (padrão: INFO)
Exemplos Detalhados
Conexão Básica a um Servidor Remoto
Conecte-se a um servidor MCP remoto (servidor SSH) executando na porta 8022:
uvx m2m-mcp-server-ssh-client --host mcp.example.com
Usando uma Chave SSH Personalizada
Especifique uma chave SSH específica para autenticação:
uvx m2m-mcp-server-ssh-client --host mcp.example.com --client-key ~/.ssh/mcp_custom_key
Se sua chave for protegida por frase secreta:
uvx m2m-mcp-server-ssh-client --host mcp.example.com --client-key ~/.ssh/mcp_custom_key --passphrase "your-passphrase"
Modo de Depuração para Solução de Problemas
Ative o registro detalhado para solucionar problemas de conexão:
uvx m2m-mcp-server-ssh-client --host mcp.example.com --log-level DEBUG
Integração com Servidor de Chaves
O Cliente SSH MCP pode usar um servidor de chaves para troca e verificação dinâmica de chaves:
uvx m2m-mcp-server-ssh-client --host mcp.example.com --use-key-server
Ao usar um servidor de chaves:
- O cliente busca a chave pública do servidor em
http://host:key-server-port/server_pub_key - O cliente registra sua chave pública no servidor em
http://host:key-server-port/register - Um arquivo
known_hoststemporário é criado para a conexão SSH
Este recurso é mutuamente exclusivo com --known-hosts e --disable-host-key-checking.
Desabilitando a Verificação de Chave do Host
⚠️ Aviso de Segurança: Usar
--disable-host-key-checkingtorna sua conexão vulnerável a ataques de intermediário (man-in-the-middle). Use esta opção apenas em redes confiáveis ou para fins de desenvolvimento/testes.
uvx m2m-mcp-server-ssh-client --host localhost --disable-host-key-checking
Configurar para Claude Desktop
Adicione às suas configurações do Claude:
"mcpServers": {
"remote-servers": {
"command": "uvx",
"args": [
"m2m-mcp-server-ssh-client",
"--host", "example.com",
"--port", "8022",
"--username", "mcp"
]
}
}
Para uma configuração mais segura com uma chave 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"
]
}
}
Como Funciona
O Servidor Cliente SSH MCP estabelece uma conexão SSH com um servidor remoto que executa o Servidor SSH MCP para ferramentas MCP, ou seja, m2m-mcp-server-ssh-server. Em seguida:
- Cria um servidor proxy local que espelha os recursos do servidor MCP remoto
- Encaminha todas as solicitações MCP para o servidor remoto através da conexão SSH
- Retorna as respostas do servidor remoto para o cliente local
Isso permite que você use ferramentas executadas em máquinas remotas como se estivessem instaladas localmente.
Fluxo de Autenticação
%%{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
Considerações de Segurança
- Sempre use verificação de chave do host em ambientes de produção
- Use chaves SSH protegidas por frase secreta para maior segurança
- Considere usar chaves SSH dedicadas para conexões MCP
- Defina permissões apropriadas (600) para seus arquivos de chave SSH
- Use um usuário dedicado com privilégios limitados no servidor remoto
Solução de Problemas Comuns
Conexão Recusada
Error running MCP SSH client: [Errno 111] Connection refused
Solução: Verifique se o host e a porta estão corretos e se o serviço SSH está em execução.
Falha de Autenticação
Error running MCP SSH client: Authentication failed
Solução: Verifique o caminho do arquivo de chave. Certifique-se de que o servidor remoto tenha sua chave pública instalada.
Falha na Verificação da Chave do Host
Error running MCP SSH client: Host key verification failed
Solução: Adicione a chave do host ao seu arquivo known_hosts ou use --disable-host-key-checking (apenas para testes).
Dependências
- anyio (>=4.5.0)
- asyncssh (>=2.20.0)
- mcp (>=1.1.3)
- pydantic (>=2.0.0)
Desenvolvimento
Configurar Ambiente de Desenvolvimento
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]"
Qualidade de Código
# Run linting
uv run ruff check .
# Run formatting check
uv run ruff format --check .
# Run security checks
uv run bandit -r src/
Depuração
Você pode usar o inspetor MCP para depurar o cliente:
npx @modelcontextprotocol/inspector uvx m2m-mcp-server-ssh-client --host example.com
Para depuração avançada, use o seguinte fluxo de trabalho:
- Inicie o cliente com
--log-level DEBUG - Verifique os parâmetros de conexão SSH e o processo de handshake
- Se estiver usando chaves personalizadas, verifique os caminhos e permissões corretos
- Use
ssh -vdiretamente para testar a conectividade básica primeiro
Contribuições
Aceitamos contribuições para ajudar a expandir e melhorar o m2m-mcp-server-ssh-client. Se você deseja adicionar novos recursos, aprimorar funcionalidades existentes ou melhorar a documentação, sua contribuição é valiosa.
Pull requests são bem-vindos! Sinta-se à vontade para contribuir com novas ideias, correções de bugs ou melhorias.
Diretrizes de Contribuição
- Faça um fork do repositório
- Crie um branch de recurso:
git checkout -b feature-name - Faça commit das suas alterações:
git commit -am 'Add some feature' - Envie para o branch:
git push origin feature-name - Envie um pull request
Licença
Licença MIT - Consulte o arquivo LICENSE para obter detalhes.
Autores
- Machine To Machine