Túneis SSH

pDamascenopDamasceno
2 min read

Túneis SSH são uma ferramenta poderosa para estabelecer conexões entre três entidades que enfrentam restrições ou limitações para se comunicarem diretamente. Esses túneis são especialmente úteis para superar desafios relacionados à direção da conectividade ou determinar qual entidade pode iniciar uma conexão com outra. O processo envolve o encaminhamento de tráfego de rede de um host para outro por meio de um intermediário, contornando barreiras de conectividade.


JumpHost

Eu frequentemente utilizo o recurso de encaminhamento de túneis SSH para acessar endpoints disponíveis a partir de um JumpHost, mas não do meu laptop.

Diagrama JumpHost

Exemplo de Configuração

ssh -L [local_addr:]local_port:remote_addr:remote_port [user@]sshd_addr

## Exemplos
ssh -L 8443:destino:443 usuario@jumphost
ssh -L 2022:destino:22 usuario@jumphost

Aqui está uma representação visual:

Representação visual do túnel


Proxy Reverso

A ideia é permitir que uma entidade acessível por você se conecte por meio de outra entidade que não consegue estabelecer essa conexão diretamente.

Diagrama Proxy Reverso

O caso de uso mais comum que vi em outros artigos é:

  • Expor um serviço de desenvolvimento à internet pública para uma demonstração.

    Alvo
    Pode ser um servidor web em sua empresa ou em sua própria máquina, por exemplo.

Outro caso de uso que precisei por algum tempo foi:

  • Expor um serviço público a um servidor interno.

Guia Passo a Passo do Meu Caso

Há um servidor da empresa que não tem acesso ao GitHub, onde armazeno uma grande quantidade de código.

Minha máquina pessoal de trabalho tem acesso ao GitHub. Posso me conectar ao servidor a partir da minha máquina, mas não posso conectar ao meu computador a partir do servidor devido a regras de firewall que bloqueiam essa conexão (o que impede o uso da técnica de JumpHost).

Portanto, preciso criar um túnel da minha máquina para o servidor para conceder acesso a algo.

É necessário configurar uma conexão de proxy reverso para que o servidor tenha acesso ao GitHub.

Anônimo
O agente que solicita o tráfego seria o próprio gateway (o servidor).

— No Servidor Remoto

  1. Certifique-se de adicionar as chaves SSH ao GitHub.

  2. Carregar Permanentemente a Chave SSH no ssh-agent

nano ~/.bashrc
#### Adicione ao final do arquivo
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/github_private_key
  1. Ajustar o Arquivo de Configuração do Git
nano ~/.ssh/config
Host localhost
    Hostname localhost
    Port 8088
    User git
  1. Configurar a Origem

No repositório da sua pasta:

git remote set-url origin git@localhost:usuario/REPONOME.git
  1. Criar o Túnel (A partir da Sua Máquina Local)
ssh -R 8088:github.sua_empresa.com:22 servidor
  1. Validar o Acesso
ssh -T git@localhost

Referências

https://www.ssh.com/academy/ssh/tunneling-example

https://docs.github.com/en/authentication/connecting-to-github-with-ssh

0
Subscribe to my newsletter

Read articles from pDamasceno directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

pDamasceno
pDamasceno