Isso pode ser feito facilmente com uma conexão reserva-SSH.
Preparação no servidor:
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.
Se, por motivos de segurança, você quiser alterar a porta SSH padrão na sua máquina doméstica, basta substituir o :22
no script do lado do servidor pela porta personalizada de sua preferência.