Tutorial SSH Tunnel

Normalmente as redes das universidades e empresas são protegidas por algum tipo de firewall. Isto significa que, mesmo que a sua máquina dentro do sistema tenha um número de IP válido na internet, pode ser que você não consiga acessá-la de fora, pois o acesso fica bloqueado no firewall. Normalmente apenas uma máquina fica disponível para acesso externo, e primeiro você tem que entrar nela para depois acessar as outras máquinas. Algo como mostrado na figura abaixo:

esquema do firewall
legenda

Neste exemplo, primeiro você teria que entrar na máquina gate e depois entrar na machine1. Algo assim:

user@casa$ ssh gate
password: ....

user@gate$ ssh machine1
password: ...

user@machine1$

Isso é muito bom para o administrador pois ele só precisa se preocupar em deixar uma máquina segura. Agora suponha que você queira abrir outro terminal na máquina machine1. Por exemplo, você quer editar um arquivo em uma janela e executar um script em outra... Você vai ter que fazer mais 2 conexões ssh! E se quiser +1 terminal?? Já viu...

A solução para isso é um SSH Tunnel. Funciona assim, você abre uma primeira conexão na máquina gate informando para o SSH que quer abrir um túnel para a máquina machine1. Um túnel é feito redirecionando as portas locais e remotas. Exemplo prático:

user@casa$ ssh -N -C -f -q -L 22000:machine1:22 gate

Significado das opções:

  • -N Não executa nenhum comando, só redireciona as portas de comunicação
  • -C Compressão dos dados, para aproveitar melhor a sua conexão
  • -f O ssh vai para background depois de executado
  • -q Modo silencioso, para não ficar escrevendo muito output na tela

A mais importante é a -L que diz para o SSH redirecionar todo o acesso na porta 22000 da máquina local (no nosso exemplo, a máquina casa) para a porta 22 da máquina machine1. Veja que na linha de comando não aparece o nome da casa! Mas o SSH sabe que o localhost é o casa pois você está executando este comando exatamente na máquina casa!!

Uma vez conectado na máquina gate, que está para dentro do firewall, o ssh vai conseguir enxergar a machine1. Para conectar nela, basta abrir um novo terminal na maquina casa e mandar o ssh se conectar na porta 22000 do localhost.

user@casa$ ssh -p 22000 localhost

O que vai acontecer? O outro ssh, que ainda está rodando, vai perceber que "alguém" está acessando a porta 22000 do localhost e vai encaminhar este acesso para a porta 22 (que é a porta do SSH) na máquina machine1. Ou seja, uma vez aberto o túnel, você consegue conectar "diretamente" de fora para dentro do firewall.

OBS:

  1. Como passamos as opções -q e -N o prompt fica liberado depois de digitar o primeiro comando ssh. Você pode continuar usando este prompt normalmente.
  2. Você pode trocar 22000 por qualquer outro número de porta que não esteja sendo usado no localhost (máquina casa).
  3. A porta 22 é a porta default onde os servidores SSH se comunicam, então você não vai querer mudar isso.
  4. Você pode trocar o nome das máquinas pelo número IP.
  5. O nome localhost é um atalho default para o IP/Nome da máquina local, neste exemplo, casa.
Page last modified on October 05, 2010, at 11:41 PM
Powered by PmWiki