Я внедряю небольшую playbook для установки некоторых apt-пакетов на мои машины, например, docker, git.
Вот пример задачи:
- name: "Docker: install various dependencies"
become: true
tags:
- docker_installation
apt:
# force_apt_get: true # didnt help
name: "apt-transport-https, ca-certificates, curl, software-properties-common"
update_cache: true
state: present
Поскольку я хочу использовать sudo без пароля, я создал выделенного пользователя ansible на целевых хостах, которые будут выполнять playbook-задания. Я пытаюсь добиться, чтобы отвечающему пользователю разрешалось выполнять только команды , необходимые для playbook , без запроса пароля.
Поэтому я отредактировал файл sudoers какследующее (показывает только значения по умолчанию):
root ALL=(ALL:ALL) ALL
ansible ALL=(root) NOPASSWD: /usr/bin/apt-cache, /usr/bin/apt-get update install, /usr/bin/apt
Когда я выполняю ssh на целевом хосте как пользователь, отвечающий требованиям пользователя, я могу выполнять связанные с apt команды, как и ожидалось, без запроса пароля. Однако, когда я запускаю пьесу, она выходит из строя и сообщает:
Эскалация требует пароль
fatal: [elk-dummy]: FAILED! => {
"msg": "Missing sudo password"
}
Когда я изменяю запись sudoers на
ansible ALL=(root) NOPASSWD: ALL
все работает нормально.
Глядя на этот связанный пост Я надеялся получить некоторую информацию из журналов, но я не знаю, как обработать это сообщение / причину:
<192.168.2.35> УСТАНОВИТЬ СОЕДИНЕНИЕ SSH ДЛЯ ПОЛЬЗОВАТЕЛЯ: ansible
<192.168.2.35> SSH: EXEC ssh -vvv -C -o ControlMaster = auto -o ControlPersist = 60s -o KbdInteractiveAuthentication = no-o PreferredAuthentications = gssapi-with-mic, gssapi-keyex, на базе хоста, publickey -o PasswordAuthentication = no -o 'User = "ansible"' -o ConnectTimeout = 10 -o ControlPath = / home / lukas / .ansible / cp /0e1063962c 192.168.2.35 '/ bin / sh -c' "'"' chmod u + x /home/ansible/.ansible/tmp/ansible-tmp-1576966035.82-40405969615486/ /home/ansible/.ansible/tmp/ansible-tmp-1576966035.82-40405969615486 / AnsiballZ_command.py && sleep 0 '"'" ''
<192.168.2.35> УСТАНОВИТЬ СОЕДИНЕНИЕ SSH ДЛЯ ПОЛЬЗОВАТЕЛЯ: ansible
<192.168.2.35> SSH: EXEC ssh -vvv -C -o ControlMaster = auto -o ControlPersist = 60 с -o KbdInteractiveAuthentication = нет -o PreferredAuthentications = gssapi-with-mic, gssapi-keyex, на базе хоста, publickey -o PasswordAuthentication = no -o 'User = "ansible"' -o ConnectTimeout = 10 -o ControlPath = / home / lukas / .ansible / cp / 0e1063962c -tt 192.168.2.35'/ bin / sh -c' "'"' sudo -H -S -n -u root / bin / sh -c '"'" '"'" '"'" '"'" 'echo BECOME-SUCCESS-nsmqtlltfzcxfvlapewjxgvqsbjfhzlc;/ usr / bin / python3 /home/ansible/.ansible/tmp/ansible-tmp-1576966035.82-40405969615486/AnsiballZ_command.py '"'" '"'" '"" "" "" "" && sleep 0' "'"''
Я уже посмотрел код Python модуля apt, ищущий другие команды, которые будут выполняться для модуля apt, но я не смог найти ни одной.
Любая помощь в достижении этого очень ценится!
Я использую ANSIB версии 2.9.2. Целевой хост работает на сервере Ubuntu 18.04.