Executando verificação de segurança...
2

INFRA: Como usar tunnel’s (ssh) para acessar serviços privados – sem dor de cabeça

Introdução

Tunnels ssh são usados como solução em diversos lugares, por diversas outras tecnologias. O dbeaver por exemplo, possibilita o usuário acessar um banco de dados privado através de tunnels.

O SSH (Secure Shell) é um mecanismo seguro de credencial e acesso remoto que utiliza criptografia forte para autenticar usuários e proteger a comunicação entre sistemas. Ou seja, uma vez que temos acesso a um servidor por meio deste protocolo, também teremos acesso a várias outras informações ali dentro.


Problema Exemplo

Agora, sendo um pouco mais específico, o exemplo que veremos neste artigo é o acesso a um banco de dados privado através de tunnels.

Imagine que você está desenvolvendo uma funcionalidade, uma querie, uma automação etc. Você a conclui usando seu ambiente local, porém, ao realizar a ‘entrega’ (deploy) o resultado é um pouco diferente/inesperado do que você havia obtido.

Nesse momento, seria de extrema utilidade replicar, se possível, de forma segura e prática, o ambiente a qual você realizou o deploy.

Solução

# ssh -L <porta_local>:<host>:<porta_host> usuario@servidor

➜  system ssh -L 5433:localhost:5432 [email protected]
[email protected]'s password:

No exemplo acima, vemos uma conexão um pouco parecida com uma conexão comum a um servidor via ssh por terminal.

Depois de digitarmos a senha, nesse exemplo, ele estabelecerá uma conexão frontground e a sessão deste terminal será dedicada ao tunnel. (é possível criar em background também).

O que estamos fazendo é redirecionar o serviço na porta 5432 no host remoto para a porta 5433 em nosso host local. Essa porta, é a porta padrão do postgres, então, agora, temos acesso ao postgres (que até então é um serviço privado) do servidor remoto em nossa máquina local.

Então agora, podemos acessar livremente o serviço:

# laravel/.env 
DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_PORT=5433
DB_DATABASE=seu_banco
DB_USERNAME=seu_usuario
DB_PASSWORD=sua_senha

Observações:

  • Use 127.0.0.1 (não localhost). Em alguns ambientes, localhost pode tentar socket/IPv6 e causar erro.
  • O túnel precisa ficar rodando enquanto sua API ou serviço estiver usando o banco.
  • Se o túnel cair, o Laravel ou a aplicação que estiver usando vai começar a dar erro de conexão (timeout / connection refused).
  • Lembre-se sempre de limpar os caches/configs do seu serviço antes e após estabelecer e encerrar a conexão.
  • Caso esteja usando algo como Docker , você precisará criar o tunnel no mesmo ambiente em que seus demais serviços estão.
Carregando publicação patrocinada...
1
1
1