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.
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 (comolocalhost
, se o serviço estiver no próprio servidor).<porta-do-serviço>
: Porta do serviço remoto, como5432
para PostgreSQL ou3306
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.