Receita - Conectando com segurança a serviços remotos usando um Túnel SSH

Como usar um túnel SSH para acessar serviços remotos que não estão disponíveis diretamente na internet.

Receita - Conectando com segurança a serviços remotos usando um Túnel SSH

Já precisou acessar um serviço remoto, como um banco de dados na nuvem, que está em uma rede protegida ou privada à qual você não tem acesso direto? Um túnel SSH é uma solução segura e eficiente para realizar essa tarefa.

O túnel SSH permite que criemos uma conexão criptografada entre nossa máquina local e um ponto intermediário que tenha acesso direto ao serviço que precisamos. Com isto cria-se a impressão de que sua máquina local está conectada ao serviço remoto, mas, na verdade, o acesso é feito através do servidor intermediário, atuando como uma ponte segura.

O que é um Túnel SSH?

Um túnel SSH é uma conexão segura criada usando o protocolo SSH (Secure Shell). Ele redireciona o tráfego de uma porta local na sua máquina para uma máquina intermediária, que tem acesso direto ao serviço remoto. Esta conexão é criptografada, garantindo que os dados sejam protegidos contra interceptações.
Tem dois pilares fundamentais:

  • O protocolo SSH: Ele estabelece uma conexão segura entre sua máquina e o servidor remoto, e o mais importante: toda essa comunicação é criptografada.
  • Redirecionamento de porta: O tráfego de uma porta local na sua máquina é enviado através do túnel para o serviço remoto no servidor.

Por que usar um túnel SSH?

  • Segurança: Todo tráfego entre nossa máquina e o servidor é criptografado.
  • Acesso remoto: Permite acessar bancos de dados protegidos sem expô-los diretamente à internet.
  • Flexibilidade: Funciona com qualquer tipo de banco ou recurso acessível pela rede.


Ingredientes:

  • Chave SSH (isto é opcional): Arquivo .pem ou equivalente, necessário para autenticar o acesso ao servidor remoto caso ele não aceite autenticação por senha.
  • Servidor remoto: Um servidor que tenha acesso ao banco de dados.
  • Serviço remoto protegido: Pode ser um banco de dados, uma aplicação web, ou outro serviço configurado para aceitar conexões internas. Nesta receita, usaremos um banco de dados como exemplo.
  • Um terminal: Para configurar o túnel.
  • Cliente para o serviço remoto: Por exemplo, um navegador ou um cliente de banco de dados, como DBeaver.

Primeiro passo: Configuração do túnel SSH

O túnel SSH redireciona uma porta na sua máquina local para o banco de dados no servidor remoto. O comando genérico para o terminal é:

ssh -i <caminho/para/sua-chave.pem> -L :: <porta-local>:<host-do-serviço>:<porta-do-serviço> <usuario>@<host-do-servidor>
  • -i <caminho/para/sua-chave.pem> (opcional): Caminho para o arquivo da chave privada que permite autenticar no servidor remoto. Se não for usada, o SSH tentará autenticar com senha ou por outro método configurado.
  • -L: Especifica o redirecionamento de porta.
  • <porta-local>: A porta da sua máquina local que você usará para acessar o banco de dados.
  • <host-do-serviço>: Endereço do serviço remoto (como localhost, se o serviço estiver no próprio servidor).
  • <porta-do-serviço>: Porta do serviço remoto, como 5432 para PostgreSQL ou 3306 para MySQL.
  • <usuario>: Nome do usuário que você usa para acessar o servidor remoto.
  • <host-do-servidor>: O endereço do servidor remoto que atuará como intermediário.

Exemplo genérico:

ssh -i ~/.ssh/minha-chave.pem -L 15432:banco-interno.example.com:5432 ubuntu@servidor.example.com


Neste exemplo, queremos acessar um banco PostgreSQL remoto hospedado em um servidor protegido (banco-interno.example.com) através de um intermediário (servidor.example.com). O arquivo `~/.ssh/minha-chave.pem` é a chave privada que permite autenticar no servidor remoto como o usuário `ubuntu`.

O comando cria um túnel SSH que redireciona todas as conexões feitas para a porta local `15432` (em sua máquina) para a porta `5432` do banco remoto. Dessa forma, você pode acessar o banco como se ele estivesse rodando localmente, conectando-se ao endereço `localhost` na porta `15432`.

Simples assim! O servidor remoto já estará atuando como uma ponte para redirecionar a porta local da nossa máquina para o banco de dados remoto.

Segundo passo: Acesse o serviço remotamente

Agora que o túnel está ativo, você pode acessar o serviço remoto como se ele estivesse rodando na sua maquina local. Exemplos:

  • Aplicações web: Acesse pelo navegador usando o endereço http://localhost:<porta-local>.
  • Bancos de dados: Conecte-se usando um cliente como DBeaver ou linha de comando, configurando localhost:<porta-local> como host e porta.

Mantido por itexto Consultoria