Sim, isso é autossh , um wrapper em torno de ssh projetado exatamente para isso. A página de autossh man afirma:
autossh is a program to start a copy of ssh and monitor it, restarting it as necessary should it die or stop passing traffic.
Eu uso em uma dúzia de máquinas, e seu tempo de atividade é de 100%.
Eu uso da seguinte forma: eu coloco esta linha
su my_name -c /home/my_name/bin/auto
no arquivo /etc/rc.local da máquina que está iniciando o túnel reverso (chame-o de A). O arquivo executável (* chmod 755 auto) auto é:
#!/bin/sh
/usr/lib/autossh/autossh -M 6527 -f -p 5298 -2 -N -R 8400:localhost:2222 userB@remote_hostB -i /home/my_name/.ssh/crypto-keyB
Aqui 5298 é a porta ssh do host remoto (eu chamei de B), 2222 a porta ssh da máquina chamadora A. A porta 6527 é usada para verificar o status da conexão; ele precisará ser aberto no firewall do servidor remoto (A) para que isso funcione.
Isso configura o túnel reverso. A partir de um terminal no servidor remoto (B), posso agora conectar a máquina iniciando o túnel reverso (A) por meio do comando
sh -Y userA@localhost -p 8400 -i /home/userB/.ssh/crypto-keyA
Você deve se lembrar de conectar uma vez de qualquer máquina ao outro antes de configurar o túnel, porque será necessário responder de forma interativa a pergunta usual: A máquina A respondeu com a chave criptográfica. .; deveria ser escrito em hosts conhecidos ?.
Uma vez feito isso, você está pronto para ir. É basicamente fogo e esqueça.