Пользователь Ansible non-root sudo и эскалация привилегий" стать"

Я установил коробку с пользователем david кто имеет привилегии sudo. Я могу ssh в поле и выполнять операции sudo, такие как apt-get install. Когда я пытаюсь сделать то же самое, используя "эскалацию привилегий" Ansible, я получаю permission denied ошибка. Такой простой план может выглядеть так:

simple_playbook.yml:

---
- name: Testing...
  hosts: all
  become: true
  become_user: david
  become_method: sudo

  tasks:
    - name: Just want to install sqlite3 for example...
      apt: name=sqlite3 state=present

я запускаю этот playbook со следующей командой:

ansible-playbook -i inventory simple_playbook.yml --ask-become-pass

это дает мне подсказку для пароля, который я даю, и я получаю следующая ошибка (сокращенно):

fatal: [123.45.67.89]: FAILED! => {...
failed: E: Could not open lock file /var/lib/dpkg/lock - open (13: 
Permission denied)nE: Unable to lock the administration directory
(/var/lib/dpkg/), are you root?n", ...}

почему мне отказано в разрешении?

дополнительная информация

я запускаю Ansible 2.1.1.0 и нацелен на окно Ubuntu 16.04. Если я использую remote_user и sudo параметры согласно Ansible remote_user: david sudo: yes

обновление

локальные и удаленные имена пользователей одинаковы. Чтобы заставить это работать, мне просто нужно было указать become: yes (см. ответ @techraf):

2 ответов


почему мне отказано в разрешении?

потому что APT требует root разрешения (см. ошибку:are you root?), и вы выполняете задачи как david.

на эти параметры:

become: true
become_user: david
become_method: sudo

Анзибль становится david используя sudo метод. Он в основном запускает свой скрипт Python с sudo david перед.


пользователь "david" на пульте дистанционного управления имеет sudo преференции.

значит david может выполнять команды (некоторые или все) с помощью sudo-исполняемый файл для изменения эффективного пользователя для дочернего процесса (команду). Если имя пользователя не задано, этот процесс выполняется как


remote_user is david. Вызовите скрипт с помощью --ask-pass и дать пароль для david. Если david нет работу sudo без пароля, то вы должны также называют его --ask-become-pass.

- name: Testing...
  hosts: all
  remote_user: david
  become: true
  become_method: sudo

  tasks:
    - name: Just want to install sqlite3 for example...
      apt: name=sqlite3 state=present