Você pode tentar a opção PreferredAuthentications , configurando-a como publickey,password . O padrão inclui estes nesta ordem, junto com outras opções, de forma que ansible esteja presumivelmente configurando isso. Adicioná-lo via -o ou o cliente ssh_config pode impedir isso.
Você pode usar um script de wrapper. Por exemplo, com isso em key_or_password.sh e pass.sh que fornece a senha, executar bash key_or_password.sh root@host tentará uma publickey seguida de um login de senha não interativo.
export DISPLAY=dummy:0
export SSH_ASKPASS=$PWD/pass.sh
exec setsid ssh -v -o 'PreferredAuthentications publickey,password' "$@"
O log indica qual método foi bem sucedido, por exemplo,
debug1: Authentication succeeded (publickey).