Túneis SSH
Túnel SSH persistente entre dois VPS com autossh: um serviço do receptor fica no localhost do iniciador sem ser exposto.
- Categoria: Servidores e infraestrutura
- Estado: Disponível
- Requisitos: Dois VPS (da mesma empresa para o fluxo automático); Ser membro da empresa com acesso aos dois VPS; Sistemas com systemd e um OpenSSH compatível (consulte com
ver_funciones_vps, função “Túneis SSH entre VPS”) - Ferramentas MCP (Só leem):
ver_estado_receptor_tunel_vps,listar_claves_receptor_tunel_vps,ver_estado_iniciador_tunel_vps,listar_tuneles_vps,ver_tunel_vps - Ferramentas MCP (Escrevem ou modificam):
configurar_receptor_tunel_vps,agregar_clave_receptor_tunel_vps,configurar_iniciador_tunel_vps,crear_tunel_vps,controlar_tunel_vps - Ferramentas MCP (Destrutivas):
configurar_tunel_entre_vps,eliminar_receptor_tunel_vps,eliminar_clave_receptor_tunel_vps,eliminar_iniciador_tunel_vps,eliminar_tunel_vps
O que permite fazer?
- Usar a partir de um VPS um serviço que escuta noutro (uma base, uma API interna) como se estivesse em
localhost, sem o publicar na internet. - Montar tudo em uma única chamada (
configurar_tunel_entre_vps), ou passo a passo. - Autorizar ou revogar as chaves que podem entrar no receptor.
- Arrancar, parar ou reiniciar cada túnel, e ver o seu estado em tempo real.
Quando convém usar?
- Uma app em um VPS precisa da base de dados que vive noutro.
- Separar uma API interna do seu frontend sem abrir portas públicas do serviço.
Como funciona na ArduMaker?
É um reencaminhamento local (ssh -L) que corre no iniciador: o que escuta na puerto_remoto do receptor fica disponível em localhost:puerto_local dentro do iniciador. Não funciona ao contrário e não expõe nada à internet.
Os passos
- Receptor (
configurar_receptor_tunel_vps): cria um usuário dedicado ao túnel, configura osshdpara aceitar esse usuário na porta 2222 (sem terminal, sem X11, sem agente, só reencaminhamento TCP) e publica a 2222 com um redirecionamento. Corre em segundo plano. - Iniciador (
configurar_iniciador_tunel_vps): instala oautosshe gera um par de chaves ed25519. Também em segundo plano. - Chave: a chave pública do iniciador é autorizada no receptor (
agregar_clave_receptor_tunel_vps). - Túnel (
crear_tunel_vps): cria no iniciador um serviço systemdardutunnel_<nombre>que correautossh -L <local>:<destino>:<porta>contra o receptor, ativa-o e arranca-o.
configurar_tunel_entre_vps faz os quatro passos e também arranca o túnel. Espera que cada papel termine de se instalar (até alguns minutos); se um não terminar a tempo, para com tunel_rol_instalando e pode ser retomado com desde. Um papel já instalado não é reinstalado, uma chave já autorizada é reutilizada e um túnel com esse nome e porta local já criado é devolvido tal como está.
O que muda realmente?
No receptor
- Um usuário de túnel com as suas chaves autorizadas em um bloco próprio de
authorized_keys. - Um arquivo de configuração do
sshdgerido pela ArduMaker que acrescenta a porta 2222 com o seu blocoMatch LocalPort(a 22 continua declarada). Não deve ser editado à mão: é reescrito por inteiro sempre que muda um papel. - Um redirecionamento público para a 2222 do VPS.
No iniciador
- O pacote
autosshe um par de chaves ed25519 do usuário de túnel. - Um serviço
ardutunnel_<nombre>.servicepor túnel, comRestart=always, ativado no arranque. - Um
known_hostspróprio dos túneis: a primeira chave do receptor fica fixada e, se depois mudar, o túnel não liga.
Portas e link
| Dado | Valor |
|---|---|
| Porta do receptor no VPS | 2222 |
| Porta pública | O host_port do redirecionamento para a 2222 (public_port) |
| Host | O dnsip do receptor |
| Cadeia de link | <usuario>@<dnsip> -p <public_port> |
ExecStart=/usr/bin/autossh -M 0 -N \
-o "ServerAliveInterval=30" -o "ServerAliveCountMax=3" \
-o "StrictHostKeyChecking=accept-new" -o "ExitOnForwardFailure=yes" \
-L <puerto_local>:localhost:<puerto_remoto> \
-i <clave_del_tunel> -p <public_port> <usuario>@<dnsip>ver_estado_receptor_tunel_vps devolve a cadeia de link e um exemplo de uso para ligar a partir de outra máquina com ssh -N -L.
Esquema
- App no iniciador: localhost:<puerto_local>
- autossh: serviço ardutunnel_<nombre>
- Redirecionamento do receptor: <dnsip>:<public_port> → 2222
- sshd do receptor :2222: só o usuário de túnel, só reencaminhamento
- Serviço do receptor: localhost:<puerto_remoto>
Resultado esperado
ver_tunel_vpsmostra o túnel com o estado em tempo real do seu serviço systemd.listar_tuneles_vpslista os túneis do iniciador;ver_estado_iniciador_tunel_vpstraz a sua chave pública e o número de túneis.- A partir do iniciador, o serviço responde em
localhost:<puerto_local>.
systemctl status ardutunnel_mi-base
nc -vz localhost 15432Erros e resolução
| Resposta | Causa | O que fazer |
|---|---|---|
409 tunel_rol_instalando | Um papel ainda está sendo instalado | Pedir de novo; retoma a partir daí |
tunel_rol_fallido | A instalação de um papel falhou | Ver o estado do papel e tentar de novo |
tunel_mismo_vps | Receptor e iniciador são o mesmo VPS | Usar dois VPS diferentes |
| 409 porta local em uso | Outro túnel do iniciador já usa essa local_port | Escolher outra porta |
409 Key already registered | A chave já está autorizada | Nada a fazer |
| O túnel não liga | A chave do receptor mudou, ou a chave do iniciador não está autorizada | Rever ver_logs_systemd_vps do serviço ardutunnel_<nombre> |
Se um passo do fluxo falhar, desfaz-se o que é possível; os pacotes instalados ficam e são indicados em residuo (reinstalar não muda nada). O fluxo aceita idempotency_key e simular.
Relação com MCP
Sim, nos perfis /mcp e /mcp/vps. Instalar um papel devolve um operacion_id: ver_operacion diz quando está pronto.
| Ferramenta | Tipo |
|---|---|
configurar_tunel_entre_vps | Escrita (fluxo completo) |
ver_estado_receptor_tunel_vps, listar_claves_receptor_tunel_vps, ver_estado_iniciador_tunel_vps, listar_tuneles_vps, ver_tunel_vps | Leitura |
configurar_receptor_tunel_vps, configurar_iniciador_tunel_vps, agregar_clave_receptor_tunel_vps, crear_tunel_vps | Escrita |
controlar_tunel_vps | Escrita (com stop corta o tráfego) |
eliminar_tunel_vps, eliminar_clave_receptor_tunel_vps, eliminar_receptor_tunel_vps, eliminar_iniciador_tunel_vps | Destrutiva |
Referência em /mcp/docs e exemplos em /mcp/tuneles.