Em /etc/ssh/sshd
para o conjunto Computador B :
AllowTcpForwarding yes
TCPKeepAlive yes
Do Computador A :
$ ssh -R 2222:localhost:22 ip.of.computer.b
De Computador B :
$ ssh localhost -p 2222
Note que 2222 é um número arbitrário de porta alta que eu escolhi. Essa porta no Computador B será então encapsulada 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 que possa torná-lo um daemon e, periodicamente, tentar reconectar-se se o link for eliminado. Você provavelmente desejará uma conta especial com um shell de apenas /bin/true
no Computador B para manipular as conexões de entrada. Você pode, então, configurar uma única chave ou várias chaves para cada máquina que tem permissão para "ligar para casa".
Em Computador A , você pode achar as opções -n
, -N
e -T
úteis para desconectá-lo da entrada local (para que ele possa ser executado em segundo plano) e não tentar 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 ele tentasse derrubar o muro para passar. Um loop simples com um sono para esperar deve fazer o truque. Dez minutos é um bom número, porque não sobrecarrega a rede e os arquivos de log com tentativas se houver um problema (como o Computador B estar offline), mas ainda assim você fica razoavelmente rápido se a conexão é dropado.
#/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 no boot /etc/rc.local
. Sua primeira mudança para entrar na máquina será iniciada cerca de dez minutos depois que o Computador A for inicializado.