On dirait que vous avez besoin d'autossh. Cela surveillera un tunnel ssh et le redémarrera si nécessaire. Nous l'utilisons depuis quelques années et il semble bien fonctionner.
autossh -M 20000 -f -N your_public_server -R 1234:localhost:22 -C
Plus de détails sur le paramètre -M ici
Tous les pare-feu avec état oublient une connexion après n'avoir pas vu de paquet pour cette connexion pendant un certain temps (pour éviter que les tables d'état ne se remplissent de connexions où les deux extrémités meurent sans fermer la connexion). La plupart des implémentations TCP enverront un paquet keepalive après une longue période sans entendre de l'autre côté (2 heures est une valeur courante). Si, toutefois, il existe un pare-feu avec état qui oublie la connexion avant que les paquets keepalive puissent être envoyés, une connexion de longue durée mais inactive mourra.
Si tel est le cas, la solution consiste à empêcher la connexion de devenir inactive. OpenSSH a une option appelée ServerAliveInterval qui peut être utilisée pour empêcher la connexion d'être inactive trop longtemps (en prime, il détectera plus tôt quand le pair est mort même si la connexion est inactive).
J'ai utilisé le script Bash suivant pour continuer à générer de nouveaux tunnels ssh lorsque le précédent meurt. L'utilisation d'un script est pratique lorsque vous ne voulez pas ou ne pouvez pas installer de packages supplémentaires ou utiliser un compilateur.
while true
do
ssh <ssh_options> [[email protected]]hostname
sleep 15
done
Notez que cela nécessite un fichier clé pour établir la connexion automatiquement, mais c'est également le cas avec autossh.