Zní to, jako bys potřeboval autossh. To bude monitorovat tunel ssh a podle potřeby jej restartovat. Používáme ho několik let a zdá se, že funguje dobře.
autossh -M 20000 -f -N your_public_server -R 1234:localhost:22 -C
Více podrobností o parametru -M zde
Všechny stavové firewally zapomenou na připojení poté, co nějakou dobu neviděli paket pro toto připojení (aby se zabránilo zaplnění stavových tabulek připojeními, kde oba konce skončily bez uzavření připojení). Většina implementací TCP odešle udržovací paket po dlouhé době, aniž by to druhá strana slyšela (2 hodiny jsou běžná hodnota). Pokud však existuje stavový firewall, který zapomene na spojení dříve, než budou moci být odeslány pakety udržující život, dlouhotrvající, ale nečinné spojení zanikne.
Pokud tomu tak je, řešením je zabránit nečinnosti připojení. OpenSSH má možnost nazvanou ServerAliveInterval, kterou lze použít k zabránění příliš dlouhému nečinnosti připojení (jako bonus zjistí, kdy partner zemřel dříve, i když je připojení nečinné).
Použil jsem následující skript Bash k vytváření nových ssh tunelů, když předchozí zemře. Použití skriptu je užitečné, když nechcete nebo nemůžete instalovat další balíčky nebo používat kompilátor.
while true
do
ssh <ssh_options> [[email protected]]hostname
sleep 15
done
Všimněte si, že to vyžaduje soubor klíče k automatickému navázání spojení, ale to je i případ autossh.