Пользователь 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