Я пытаюсь использовать Ansible для автоматизации установки и настройки программного обеспечения на нескольких удаленных компьютерах.Моя личная учетная запись на машине заблокирована, но я могу использовать sudo su -
, чтобы стать пользователем root, когда я вхожу вручную.После того, как я являюсь пользователем root, я могу запускать такие вещи, как yum install git
и аналогичные команды.
Когда я пытался сделать это через Ansible, я попытался выполнить следующее для использования модуля yum
Ansible:
- name: install Git
yum:
name: git
state: present
become: yes
become_method: sudo
become_user: root
become_exe: "sudo su -"
Когда я это запустил, произошел сбой с ошибкой, говорящей, что моему пользователю не разрешено запускать команду
sudo su - root /tmp/foobarbazblablabla
В результате Ansible помещает все команды Yum во временнуюфайл сценария и затем пытается запустить его с помощью метода становления / exe.
Оказывается, у моего пользователя есть разрешение на запуск sudo su -
, но не на запуск произвольных сценариев с использованием sudo
или sudo su -
,и, следовательно, Ansible не может выполнить вышеприведенное.
В итоге я использовал уродливый обходной путь, подобный следующему:
- name: install Git
shell:
cmd: |
sudo su - <<EOF
yum install -y git
EOF
Это работает, но уродливо и не использует механизм идемпотентной проверки Ansible.
Есть ли лучший способ сделать это в Ansible, где Ansible сначала выполняет sudo su -
, а затем выполняет свой набор команд в открытой вложенной оболочке?Или мне не повезло с этим?Я сомневаюсь, что команда безопасности предоставит моим пользователям разрешения на запуск произвольных сценариев с использованием sudo
.(С другой стороны, спрашивать не мешало бы.)
Это описание аналогичной проблемы, но предлагаемые решения - те же самые уродливые хаки, которые я использовал выше: https://gist.github.com/nanobeep/3b3d614a709086ff832a
Еще один экземпляр этой ошибки с очень похожей ошибкой, которую я получаю: https://www.reddit.com/r/devops/comments/53hukf/ansible_centrify_become_root/
fatal: [hostname]: FAILED! => {"changed": false, "failed": true, "module_stderr": "",
"module_stdout": "Sorry, user username is not allowed to execute
'/bin/sh -c echo BECOME-SUCCESS-msylkobbkasuuxlawgqppdpjxmeqirgd; LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
/usr/bin/python /home/username/.ansible/tmp/ansible-tmp-1474243234.94-154392424015843/lineinfile; rm -rf \"/home/username/.ansible/tmp/ansible-tmp-1474243234.94-154392424015843/\" > /dev/null 2>&1'
as root on hostname.\r\n", "msg": "MODULE FAILURE", "parsed": false}
Обновление Если я запускаю sudo -l
, это отображается:
User foo may run the following commands on this host:
(root) /bin/kill
(root) /bin/su - bar
(root) su -