Um problema freqüente é termos uma máquina em uma rede interna, a qual não conseguimos acessar da internet. Por exemplo, eu moro em um prédio, utilizo DirectNet e portanto não posso acessar minha máquina de casa via internet. Outro exemplo seria você não conseguir acessar sua máquina no trabalho pois esta está atrás de um firewall.
Porém se você possui uma máquina com acesso externo e um servidor SSH tudo pode ser resolvido utilizando Redirecionamento de Portas (Port Forwarding).
O procedimento é bem simples, na máquina interna (inacessível na internet), execute o comando:
ssh -C -R \
$REMOTE_PORT_FW:$LOCAL_HOST:$LOCAL_PORT \
$REMOTE_USER@$REMOTE_HOST \
-o CompressionLevel=9 \
-n sleep 365d
No qual:
$REMOTE_PORT_FW$LOCAL_HOST$LOCAL_PORT$LOCAL_HOST que receberá as conexões
redirecionadas.
$REMOTE_USER$REMOTE_HOST
$REMOTE_HOSTVamos supor que você tenha uma máquina no trabalho que seja inacessível de casa pois ela está em uma intranet, atrás de um firewall, etc. Esta máquina tem o IP 10.0.0.123.
Na sua casa você tem um servidor de ssh, o qual consegue acessar do trabalho. Suponhamos que você tenha um nome minha-casa.no-ip.com para esta máquina, no trabalho você consegue acessar com:
trabalho$ ssh usuario-casa@minha-casa.no-ip.com
Portanto suas variáveis para o comando devem ser:
LOCAL_HOST=10.0.0.123 LOCAL_PORT=22 REMOTE_PORT_FW=8822 REMOTE_HOST=minha-casa.no-ip.com REMOTE_USER=usuario-casa
Na máquina no trabalho execute o comando:
LOCAL_HOST=10.0.0.123
LOCAL_PORT=22
REMOTE_PORT_FW=8822
REMOTE_HOST=minha-casa.no-ip.com
REMOTE_USER=usuario-casa
ssh -C -R \
$REMOTE_PORT_FW:$LOCAL_HOST:$LOCAL_PORT \
$REMOTE_USER@$REMOTE_HOST \
-o CompressionLevel=9 \
-n sleep 365d
Agora você poderá, em sua casa acessar o trabalho com:
casa$ ssh -p8822 usuario-trabalho@localhost
Isso irá pegar a conexão a localhost:8822 na sua casa,
redirecionar para 10.0.0.123:22 no seu trabalho.
Caso você quisesse acessar o servidor de emails interno (IP: 10.0.0.2, Porta: 110) da sua empresa, você poderia fazer:
LOCAL_HOST=10.0.0.2
LOCAL_PORT=110
REMOTE_PORT_FW=88110
REMOTE_HOST=minha-casa.no-ip.com
REMOTE_USER=usuario-casa
ssh -C -R \
$REMOTE_PORT_FW:$LOCAL_HOST:$LOCAL_PORT \
$REMOTE_USER@$REMOTE_HOST \
-o CompressionLevel=9 \
-n sleep 365d
e então configurar seu cliente de email para verificar sua caixa
postal em localhost:88110.
Os usuários de Speedy e outros que bloqueiam portas baixas devem mudar
um pouco o comando. Primeiramente deve-se alterar as configurações do
servidor de ssh para que este utilize outra porta que não a 22 (vide
arquivo /etc/init.d/sshd). Depois mude o comando supra citado e
adicione o parâmetro -p$REMOTE_PORT, com $REMOTE_PORT sendo a
porta escolhida.
Você pode obter um script que auxilia a manter a conexão aberta em: http://www.gustavobarbieri.com.br/inverse-ssh.sh
A versão mais atual desta página está em http://www.gustavobarbieri.com.br/linux_help/inverse-ssh.html