Override ansible default ssh_user

99% of the time that I use ansible, I use the ansible_ssh_user specified in my hosts file. The other 1% of the time this user doesn't exist, and I need to use the default user to create it. How can I run a playbook in such a way that it overrides the ansible_ssh_user in the hosts file?

I tried the following:

ansible-playbook my-playbook.yaml --user default --ask-pass

But this still produced the following error:

fatal: [target]: UNREACHABLE! => {"changed": false, "msg": "Invalid/incorrect password: Permission denied, please try again.", "unreachable": true}

It only worked after I commented out the ansible_ssh_user in my hosts file, but it would be pretty inconvenient to comment/uncomment this line every time.


You can pass extra variables on the ansible-playbook command line to redefine the Ansible user. For example:

ansible-playbook .... --extra-vars "ansible_ssh_user=nobody"

The man page says:

       -e, --extra-vars
          set  additional  variables  as  key=value  or YAML/JSON, if filename
          prepend with @

So you can pass key/value pairs, YAML, JSON, or a file containing variables to use. But the single key-value pair is probably enough for your case.


This is a good time to review your provisioning process. I make sure the ansible user is created with the proper ssh authorized_keys in all my kickstarts, for instance.