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
без пароля.