Se eu entendi corretamente, seu problema é que você quer esperar até que a autenticação seja bem-sucedida antes de continuar com o restante do script.
Eu resolveria isso com autenticação de chave pública e ssh-agent .
Quando isso estiver configurado e o ssh-agent estiver em execução, o ssh não pedirá uma senha e seu script será autenticado corretamente a cada vez. (Não é exatamente o mesmo que garantir que a conexão está funcionando, mas pode ser suficiente para seus propósitos)
Duas outras soluções alternativas vêm à mente:
- Use tcptraceroute em um loop while para verificar se um encaminhamento de porta está funcionando (supondo que você tenha encaminhamento de porta em uso ou possa criar um para esse propósito). Não saia do ciclo até obter uma resposta bem-sucedida.
- Coloque seus comandos de longa duração em um script no lado remoto e execute aqueles na tela ou nohup. Um truque que usei no passado é gerar um script, copiá-lo para o lado remoto e executá-lo usando nohup.