Назад | Перейти на главную страницу

Запуск задачи Ansible от имени конкретного пользователя

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