Como acessar servidor com um túnel ssh

Nesse tutorial vamos ensinar como fazer para acessar um servidor via SSH de uma rede interna (que não esteja exposto a internet) de um túnel com um servidor intermediário que esteja exposto a internet.

Para que a explicação fique mais clara, vamos nomear nossos principais componentes:

  • Bastion: será o servidor intermediário com acesso a rede interna e que fica exposto a internet
  • Servidor Destino: é o servidor que possui o recurso que queremos acessar, mas não está exposto direto para a internet, ele pode ser um servidor simples, de aplicação ou até um banco de dados.
  • Cliente: é nossa própria maquina onde iremos executar os comandos necessários para a conexão.

No diagrama abaixo demonstramos um exemplo de cenário:

DIAGRAMA 1 - CENARIO DE REDE PRIVADA
Diagrama do cenário de uma rede privada com dois servidores

Algumas premissas são necessárias para que a conexão funcione corretamente, são elas:

  1. A Bastion esteja com o seu SSH configurado corretamente e a porta 22 liberada para acessos externo.
  2. Você precisa possuir a chave .pem de acesso SSH da Bastion e o usuário de acesso.
  3. A Bastion precisa ter comunicação de rede com o servidor privado.

Fazendo a conexão com o túnel

Para nossa conexão vamos usar o terminal do Linux, mas se você estiver no Windows pode usar o Bash do Git, Putty ou o terminal do WSL.

Execute o comando abaixo no terminal substituindo as informação as informações pelos devidos valores:

ssh -L <Porta-Cliente>:<IP-Servidor-Destino>:<Porta-Servidor-Destino> -i "caminho-completo-chave.pem" <Usuarion-Bastion>@<IP-Bastion>
Terminal

Para exemplificar vamos atribuir alguns IPS ao nosso diagrama para facilitar o entendimento:

DIAGRAMA 2 - CENARIO DE REDE PRIVADA
Diagrama do cenário de uma rede privada com dois servidores com números de IPs fictícios.

Agora vamos fazer a conexão utilizando esses IPs como exemplo:

ssh -L 5000:10.0.17.2:80 -i chave.pem root@52.90.163.52
Terminal

No exemplo acima estamos disponibilizando na porta 5000 da nossa maquina uma aplicação que está sendo executada na porta 80 do Servidor de Destino, um requisição que eu precisaria fazer nesse servidor na porta 80, posso fazer para http://localhost:5000.

Nesse exemplo funciona também conexões com banco de dados, basta substituir as informações do servidor do banco e a porta que o banco opera.

Na execução do comando pode ser usado o endereço DNS no lugar dos IPs.

Links úteis

Mauricio Lima
Mauricio Lima

Bacharel em Ciência da Computação, profissional dedicado ao desenvolvimento de software e entusiasta da tecnologia.

Artigos: 65