7

I need execute ansible adhoc command.

$ ansible somehost -m command -a "cat /etc/passwd"-u someuser --ask-sudo-pass

I have an user account (someuser) with sudo privilege. Usually I became root sudo su -.

How to use adhoc command with sudo su - ?

ansible version is 2.0.0.2

1
  • try simply adding --sudo to that commandline. If that works I'll explain it in an answer. Aug 29, 2017 at 10:10

4 Answers 4

6

For Ansible version 1.9 or newer you need to use --ask-become-pass instead. For older versions --ask-sudo-pass should work.

Become (Privilege Escalation)

Before 1.9 Ansible mostly allowed the use of sudo and a limited use of su to allow a login/remote user to become a different user and execute tasks, create resources with the 2nd user’s permissions. As of 1.9 become supersedes the old sudo/su, while still being backwards compatible. This new system also makes it easier to add other privilege escalation tools like pbrun (Powerbroker), pfexec, dzdo (Centrify), and others.

2
  • doesn't work. Permission denied. currently code is ansible all -m command -a "docker info" -u mysuser --ask-pass --ask-become-pass -vvv Aug 29, 2017 at 7:05
  • @MeiramChuzhenbayev, well your answer shows that it does. In my answer I haven't given you any command to try rahter pointed you to the correct option that needs to be used and the reference to it.
    – Diamond
    Aug 29, 2017 at 9:39
6

If you have SSH keys shared to your servers in your inventory and you're going to want to sudo to root, you can further reduce the command to this:

$ ansible all -m command -a "docker info" -u myuser --become --ask-become-pass
2

The correct ansible command is

ansible all -m command -a "docker info" -u myuser --become-user root --ask-pass --ask-become-pass

0

I'm using ad-hoc and when I got into this problem, adding -b --become-user ANSIBLE_USER to my command fixes my problem. example:

ansible all  -m file -a "path=/etc/s.text state=touch" -b --become-user ansadmin

Of course, before this, I had given Sudo access to the user

If you give Sudo access to your user, you can write like this :

ansible all  -m file -a "path=/var/s.text state=touch"  -b --become-user root

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .