O SSH reverso é seu amigo. Você precisa de um servidor SSH para isso funcionar. Eu vou te dar duas abordagens para isso, o primeiro assume que você pode abrir e executar um servidor SSH da sua máquina em casa. Fornecerei uma maneira de tentar reconectar-se automaticamente a cada hora, para que seu computador em casa não precise estar sempre on-line. Como isso pode ser impossível ou difícil às vezes, eu adicionarei uma solução mais fácil e segura também, o que requer que você tenha um VPS Linux. Eles são geralmente apenas $ 2 / mês-ish.
Solução 1 - Usando apenas o seu PC em casa - Supondo IP estático:
Preparação no servidor debian:
Estou assumindo que você tenha cron
instalado e em execução. Crie um novo arquivo em /etc/cron.hourly
com o seguinte conteúdo: (não se esqueça de chmod +x
do arquivo!)
#!/bin/bash
cstate=$(netstat -na | grep "tcp" | grep "<IP-of-home-machine>:22" | tr -s " " | cut -d " " -f 6 | head -n 1)
cdate=$(date "+%Y-%m-%d %H:%M:%S")
if [[ $cstate == "ESTABLISHED" ]] || [[ $cstate == "TIME_WAIT" ]]
then
echo "[$cdate] SSH connection up. ($cstate)" >> /var/log/check-ssh-relay.log
else
echo "[$cdate] SSH connection broken. ($cstate) Reconnecting..." >> /var/log/check-ssh-relay.log
ssh -N -f -R 12122:localhost:22 <username>@<IP-of-home-machine>
fi
Isso irá verificar por hora se a conexão estiver ativa e tentará se reconectar se não estiver. Útil quando o seu PC em casa não está sempre ligado. Ele grava informações de log em /var/log/check-ssh-relay.log
. A autenticação é feita por meio de chaves SSH, portanto, certifique-se de ter configurado essa configuração com antecedência.
No seu computador em casa:
Supondo que você tenha a configuração do openssh-server corretamente, tudo que você precisa fazer agora é:
$ ssh <server-username>@localhost -p 12122
Para criar a conexão SSH. SCP, SFTP e co. funciona também, claro.
Solução 2 - Usando outro VPS como relé:
Eu uso essa solução pessoalmente. Principalmente porque eu não tenho um IP estático em casa.
Preparação no servidor debian:
Exatamente como na solução 1, exceto que em vez de <IP-of-home-machine>
você usa o IP do VPS aqui.
Preparação no VPS:
Tudo o que você precisa fazer aqui é executar o seguinte comando como usuário root:
$ ssh -g -f -N -L 0.0.0.0:13122:localhost:12122 root@localhost
O -g
é importante aqui para permitir conexões de entrada globais para esse encaminhamento de porta.
No seu PC em casa (ou literalmente em qualquer lugar):
Basta conectar-se ao seu VPS agora usando a porta 13122
(conforme especificado acima):
$ ssh <username>@<VPS-IP> -p 13122