Acho que você tem duas perguntas aqui.
Primeiro, como ter certeza de que os processos do servidor sshd terminam, liberando as portas, assim que o cliente se desconectar. Se o cliente se desconecta, não sei por que os processos do servidor ficam pendurados, a menos que talvez eles tenham processos filhos, mas sua captura de tela mostra que não. Se o cliente não desconectar, mas apenas parar de responder, o processo do servidor deverá ser encerrado por aproximadamente ClientAliveInterval * ClientAliveCountMax segundos depois.
Segundo, é como o cliente pode determinar se o túnel está funcionando. Isso é o que o recurso de monitoramento de porta do autossh faz. Se você adicionar, por exemplo, -M 20000
para a chamada para o autossh, ele configurará a porta para enviar tráfego para o host remoto na porta 20000 e recebê-lo de volta na porta 20001. Ele tentará enviar tráfego ao redor do loop a cada AUTOSSH_POLL segundos (padrão 600) , e se detectar que a conexão parou de funcionar, termine-a e inicie uma nova conexão ssh.
Adicionando a opção -M
à sua chamada de auto-atendimento, e provavelmente configurando AUTOSSH_POLL mais baixo, para dizer 30, pode ajudar se o ssh não tiver terminado corretamente.