Я пытаюсь запустить конкретную задачу Ansible от имени другого пользователя, а не того, кто запускает playbook. Мой .yml файл выглядит так:
---
- hosts: staging_servers
tasks:
- name: check user
remote_user: someusername
shell: whoami
Выполнение этой задачи показывает мне, что whoami команда возвращает пользователя, отличного от того, который я определил в задаче (точнее, возвращает пользователя, который определен в hosts файл называется ubuntu).
Я также попытался сформулировать задачу так:
---
- hosts: staging_servers
tasks:
- name: check user
sudo: yes
sudo_user: someusername
shell: whoami
но потом я получаю 'Missing sudo password'ошибка, хотя в sudoers файл, в котором говорится someusername ALL=(ALL) NOPASSWD:ALL и выдача команд с sudo на удаленной машине как someusername не спрашивает у меня пароль.
Итак, как я могу запустить конкретную задачу от имени другого пользователя, который не является пользователем, определенным в hosts файл или root сам?
Вы неправильно понимаете обе настройки:
удаленный_пользователь - это параметр Ansible, который управляет пользователем SSH, который Ansible использует для подключения: ssh ${REMOTE_USER}@remotehost
someusername ALL = (ВСЕ) NOPASSWD: ALL это конфигурация sudo, которая позволяет пользователю someusername выполнять все команды на любом хосте без пароля. Это не позволяет кому-либо выдавать команды как someusername хотя.
В идеале вы бы войти в систему как правильный пользователь и вот что remote_user это все о. Но обычно вы можете войти в систему только с правами администратора (скажем, ubuntu) и должны выполнять команды sudo от имени другого пользователя (скажем, scrapy). Тогда тебе следует уйти remote_user пользователю, который входит в систему, и добавляет в задание следующие доступные свойства:
- name: log in as ubuntu and do something as scrapy
remote_user: ubuntu
sudo: true
sudo_user: scrapy
shell: do-something.sh
Обратите внимание, что после Ansible 1.9 sudo формулировка была заменена на become, таким образом
sudo: yes
sudo_user: some_user
становится (каламбур):
become: yes
become_user: some_user
Смотрите подробности здесь: https://stackoverflow.com/a/22749788/402727