Me parece que estáis interpretando mal ServerAliveCountMax. Según entiendo en la documentación, es el número de mensajes de servidor vivo que pueden quedar sin respuesta sin que la conexión se termine. Así que en casos como el que estamos discutiendo aquí, ponerlo a un valor alto sólo asegurará que una conexión colgada no sea detectada y terminada.
El simple hecho de establecer ServerAliveInterval debería ser suficiente para resolver el problema de que un cortafuegos se olvide de la conexión, y dejar ServerAliveCountMax bajo permitirá que el extremo de origen se dé cuenta del fallo y termine si la conexión falla de todos modos.
Lo que quieres es, 1) que la conexión permanezca abierta permanentemente bajo circunstancias normales, 2) que el fallo de la conexión sea detectado y que el lado originario salga al fallar, y 3) que el comando ssh sea reemitido cada vez que salga (la forma de hacerlo depende mucho de la plataforma, el script “while true” sugerido por Jawa es una forma, en OS X en realidad configuro un elemento launchd).