Ansible SSH как один пользователь и Sudo как другой

у меня есть некоторые трудности с адаптацией конфигурации Ansible к моей среде.

моя среда тестирования:

  • PermitRootLogin нет
  • только одному пользователю разрешено подключаться через SSH (foo, без каких-либо привилегий)
  • пользователь с привилегиями sudo(bar ALL=(ALL) ALL)

мой инвентарь Ansible host выглядит так:

[servers]
server1 ansible_ssh_host=192.168.0.1 ansible_sudo=true ansible_ssh_user=foo ansible_sudo_user=bar

у меня есть ключ SSH для пользователя foo.

когда я попробую это объявление специальная команда (или любая другая) с паролем бара:

ansible server1 -m raw -a "echo test > /etc/testfile" --ask-sudo-pass
server1 | FAILED => Incorrect sudo password

тогда, если я сделаю ту же команду с паролем foo:

ansible server1 -m raw -a "echo test > /etc/testfile" --ask-sudo-pass
Sorry, user foo is not allowed to execute '/bin/bash -c echo SUDO-SUCCESS-rlpfhamukjnsfyokqbjpbttviiuildif; echo test > /etc/testfile' as bar on server1.

поэтому Ansible определенно использует foo как пользователь sudo, а не бар, как я указал. Есть ли способ заставить использовать бар вместо foo? Я действительно не понимаю функциональность sudo на Ansible, даже если я использую одного и того же пользователя для всего (bar для SSH и Bar password) ansible give возвращает меня :

server1 | FAILED | rc=1 >>
echo test > /etc/testfile : Permission denied

когда я регистрируюсь как бар на моем хост и выполнение "sudo echo test > / etc / testfile" он спрашивает у меня пароль бара и делает команду правильно. Где я ошибаюсь в Ansible поведении ?

1 ответов


подумайте об этом так:

  • ansible_ssh_user является ли пользователь ssh хосту как
  • ansible_sudo_user является ли пользователь sudo на хосте

другими словами, используя ваших пользователей и команды в качестве примера, эквивалентные команды, которые будет запускать ansible:

ssh foo@server1 sudo -u bar "echo test > testfile"

на foo пароль пользователя должен быть предоставлен, а не bar пользователей. The foo пользователю понадобятся привилегии для sudo as bar. Что-то вроде этого в sudoers:
foo    ALL=(bar) NOPASSWD: ALL

теперь foo может выполнять все команды, как bar без пароля.