Em /etc/ssh/sshd
para computador B set:
AllowTcpForwarding yes
TCPKeepAlive yes
Do Computador A :
$ ssh -R 2222:localhost:22 ip.of.computer.b
Do computador B :
$ ssh localhost -p 2222
Observe que 2222 é um número arbitrário de porta alta que eu escolhi. Essa porta no Computador B será encapsulada de volta através da conexão SSH inicializada no Computador A para a porta 22. Se você tiver várias máquinas, deverá usar uma porta diferente para cada máquina.
Para o seu caso de uso, você provavelmente desejará executá-lo a partir de um script para torná-lo um daemon e periodicamente tentar se reconectar se o link for descartado. Você provavelmente desejará uma conta especial com um shell apenas /bin/true
no Computador B para lidar com as conexões de entrada. Você pode configurar uma única chave ou várias chaves para cada máquina que pode "ligar para casa".
No Computador A que você pode encontrar o -n
, -N
e -T
opções úteis para desconectá-lo da entrada local (para que ele possa ser executado em segundo plano), não tente executar qualquer comando remoto, basta abrir o túnel, e não criar um tty.
A maioria dos métodos normais de gerar um daemon não funciona muito bem com a configuração de um túnel de rede como este. Um problema na conectividade de rede faria com que tentasse derrubar o muro para superar. Um loop simples com um sono para aguardar deve fazer o truque. Dez minutos é um bom número, porque não inunda a rede e os arquivos de log com tentativas, se houver um problema (como o Computador B estar offline), mas ainda assim você voltará razoavelmente rápido se a conexão cair.
#/bin/sh
while true; do
sleep $((60*10))
ssh -nNT -R 2222:localhost:22 ip.of.computer.b
done
Um script como esse pode ser executado iniciado na inicialização /etc/rc.local
. Sua primeira alteração no logon na máquina começará cerca de dez minutos após a inicialização do Computador A.