Me parece seguro que todos están malinterpretando ServerAliveCountMax. Según tengo entendido los documentos, es la cantidad de mensajes activos del servidor que pueden quedar sin respuesta sin que se finalice la conexión. Entonces, en casos como los que estamos discutiendo aquí, establecerlo en un valor alto solo garantizará que no se detecte y finalice una conexión bloqueada.
Simplemente configurar ServerAliveInterval debería ser suficiente para resolver el problema con un firewall que se olvida de la conexión, y dejar ServerAliveCountMax bajo permitirá que el extremo de origen note la falla y termine si la conexión falla de todos modos.
Lo que desea es 1) que la conexión permanezca abierta permanentemente en circunstancias normales, 2) que se detecte la falla de conexión y que el lado de origen salga en caso de falla, y 3) que se vuelva a emitir el comando ssh cada vez que salidas (la forma en que lo hace depende mucho de la plataforma, el script "verdadero" sugerido por Jawa es unidireccional, en OS XI realmente configuró un elemento lanzado).
watch
comando como:watch -n1 60 echo "wiiiii"
. El túnel no morirá a menos que la red esté rota o no la use.