Usando SSH para acessar máquinas de uma rede interna 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`` Porta na máquina remota, acessível na internet, a qual vai receber as conexões a redirecionar : ``$LOCAL_HOST`` Nome da máquina ou IP na rede interna, possivelmente inacessível via internet, pode ser algo como 192.168.1.1 caso este seja um IP acessível na máquina em que este comando foi executado. As conexões serão redirecionadas para esta máquina. : ``$LOCAL_PORT`` Porta na máquina ``$LOCAL_HOST`` que receberá as conexões redirecionadas. : ``$REMOTE_USER`` Usuário de ssh na máquina ``$REMOTE_HOST`` : ``$REMOTE_HOST`` Máquina com servidor de ssh que pode ser acessada pela máquina interna, na qual será executado o comando. == Exemplo == Vamos 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``. == Dica para usuários de Speedy & Afins == 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. == Download == 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