Я пытаюсь запустить конкретную задачу 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