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.
    – tedder42
    Aug 29, 2017 at 10:10

4 Answers 4

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
5

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
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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.