Ansible version 2.1
I have an inventory file hosts
[nodes]
host1
host2
...And a simple playbook site.yml
---
- hosts: all tasks: - include: tasks/main.ymlIf I just start the play,
ansible-playbook -i hosts site.yml -vvvvI get this error for all hosts,
ESTABLISH SSH CONNECTION FOR USER: None
fatal: [host1]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh.", "unreachable": true}
...However, reading Ansible Inventory doc, I added ansible_user to the hosts file,
[nodes]
host1 ansible_user=root
host2 ansible_user=root
...This solves the SSH CONNECTION UNREACHABLE error. However, do I have to add ansible_user=root next to all the hosts? Or is there a simpler way to do this?
3 Answers
Check the example/default ansible.cfg file, and you'll find this under [defaults]:
# default user to use for playbooks if user is not specified
# (/usr/bin/ansible will use current user as default)
#remote_user = rootUncomment remote_user and set the user to what you want to log in as.
Where does Ansible get ansible.cfg? The same file explains:
# nearly all parameters can be overridden in ansible-playbook
# or with command line flags. ansible will read ANSIBLE_CONFIG,
# ansible.cfg in the current working directory, .ansible.cfg in
# the home directory or /etc/ansible/ansible.cfg, whichever it
# finds first 2 Another way is to use --user to define remote ssh user. Type ansible-playbook --help to read more. This is my typical command:
ansible-playbook -i hosts site.yml --user <user> --ask-pass -vvvv
--ask-pass will prompt to enter password for --user
In addition to modifying the ansible.cfg, u can also define variables for 'all' group or other groups
[all:vars]
ansible_user = root
ansible_port = 22