You’ll need to be using passwordless ssh keys so that your web_user can connect non-interactively (Ansible doesn’t accommodate a password prompt.) But, maybe you have passwordless ssh set up and the remote is asking for a password as a fallback because no key is found (?? I’m no ssh expert).
I still suspect your github_ssh_keys formatting could be the problem, failing to load up your public key for web_user. Notice the indentation. Each line is indented two spaces more than the line above. I haven’t tested whether it fails using your format, but the exact format may be required for the yaml parsing to work.
github_ssh_keys:
- username: newbird
authorized:
- "{{ web_user }}"
If that formatting doesn’t resolve it, another helpful diagnostic would be to ssh into the server and check whether your public key appears for web_user, e.g., in the file at /home/web/.ssh/authorized_keys
If the key is not there, the problem is still in the github_ssh_keys role of server.yml.