Я установил ящик с пользователем 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
Я запускаю эту пьесу с помощью следующей команды:
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 ‹v1.9, он работает нормально, например:
remote_user: david
sudo: yes
Обновить
Имена локального и удаленного пользователей совпадают. Чтобы это заработало, мне просто нужно было указать become: yes
(см. Ответ @ techraf):
remote_user: david
сbecome: true
, похоже, все работает нормально. Верны ли эти настройки в данной ситуации? 06.12.2016remote_user
не имеет прямого отношения к параметрам, начинающимся сbecome
. Это<user>
, который вы используете в командеssh <user>@<server>
. В одном из своих комментариев вы сказали, что используете одного и того же пользователяdavid
как на клиенте, так и на сервере, поэтому вы подключаетесь кssh <server>
. В этой ситуацииremote_user: david
не имеет никакого эффекта. Можешь включить, можешь убрать. Ничего не изменить. Проблема была сbecome_user: david
. Только. 06.12.2016remote_user: david
, если вы используете Ansible на своем (клиентском) компьютере, используя учетную запись с именемdavb
(или любую другую, кромеdavid
). 06.12.2016david
имеет привилегии root. 06.12.2016sudo
- для префикса всех команд управления, аsudo su
илиsu root
- для переключения на root. Спасибо за объяснение, я часами пытался найти причину этого, поскольку доступная документация не упоминает об этом. 01.04.2018