Ansible: создать пользователя с привилегиями sudo
Я взял сервер Ubuntu 14.04. У него есть пользователь, называемый "развертыватель" (используется с capistrano), и поэтому ему нужны привилегии sudo. С помощью этой настройки я могу войти на сервер и сделать что-то вроде:
workstation> ssh [email protected]
myserver> sudo apt-get install git
myserver> exit
workstation>
Я пытаюсь выяснить, как использовать Ansible (версия 2.0.2.0 и python 2.7.3) для создания пользователя, называемого "развертыватель" , и иметь возможность входа на сервер с этим идентификатором, а затем так судо-иш-вещи как "apt-get install". Моя книга выглядит так:
---
- hosts: example
become: yes
tasks:
- name: Update apt cache
apt:
update_cache: yes
cache_valid_time: 3600
- group: name=sudo state=present
- name: Add deployer user and add it to sudo
user: name=deployer
state=present
createhome=yes
become: yes
become_method: "sudo"
- name: Set up authorized keys for the deployer user
authorized_key: user=deployer key="{{item}}"
with_file:
- /home/jaygodse/.ssh/id_rsa.pub
После запуска этой пьесы я могу ssh в качестве "развертывателя" (например, ssh deployer @myserver), но если я запустил команду sudo, она всегда запрашивает у меня пароль sudo.
Я понимаю, что пользователь "развертывателя" в конечном итоге должен найти свой путь в файле пользователей visudo, но я не могу понять, какие магические заклинания Ansible вызываются, чтобы я мог ssh войти в машину в качестве развертывателя, а затем запустить команду sudo (например, sudo apt-get install git ") без запроса пароля sudo.
Я искал высокий и низкий, и я не могу найти фрагмент плеера Ansible, который помещает пользователя "развертыватель" в группу sudo, не требуя пароля. Как это делается?
Ответы
Ответ 1
Иногда это зная, что спросить. Я не знал, что я разработчик, который взял на себя работу DevOps.
По-видимому, "пароль без пароля" или логин NOPASSWD - это то, что вам нужно поместить в файл /etc/sudoers.
Ответ на мой вопрос в Ansible: лучшая практика для ведения списка sudoers.
Фрагмент кода Ansible playbook выглядит следующим образом:
- name: Make sure we have a 'wheel' group
group:
name: wheel
state: present
- name: Allow 'wheel' group to have passwordless sudo
lineinfile:
dest: /etc/sudoers
state: present
regexp: '^%wheel'
line: '%wheel ALL=(ALL) NOPASSWD: ALL'
validate: 'visudo -cf %s'
- name: Add sudoers users to wheel group
user: name=deployer groups=wheel append=yes state=present createhome=yes
- name: Set up authorized keys for the deployer user
authorized_key: user=deployer key="{{item}}"
with_file:
- /home/railsdev/.ssh/id_rsa.pub
И самое главное, что решение является идемпотентным. Он не добавляет строку
%wheel ALL=(ALL) NOPASSWD: ALL
в/etc/sudoers, когда проигрыватель запускается в следующий раз. И да... Я смог отправить ssh на сервер как "развертыватель" и запустить команды sudo без необходимости указывать пароль.
Ответ 2
Создать пользователя с привилегиями sudo - это поместить пользователя в /etc/sudoers
или сделать его членом группы, указанной в /etc/sudoers
. И чтобы сделать это без пароля, нужно дополнительно указать NOPASSWD
в /etc/sudoers
.
Пример /etc/sudoers
:
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
## Same thing without a password
%wheel ALL=(ALL) NOPASSWD: ALL
И вместо того, чтобы возиться с файлом /etc/sudoers
, мы можем создать новый файл в /etc/sudoers.d/
так как этот каталог включен в /etc/sudoers
по умолчанию, что исключает возможность поломки существующего файла sudoers, и также устраняет зависимость от содержимого внутри /etc/sudoers
.
Чтобы достигнуть выше в Ansible, обратитесь к следующему:
- name: sudo without password for wheel group
copy:
content: '%wheel ALL=(ALL:ALL) NOPASSWD:ALL'
dest: /etc/sudoers.d/wheel_nopasswd
mode: 0440
Вы можете заменить %wheel
другими именами групп, такими как %sudoers
или другими именами пользователей, такими как deployer
.
Ответ 3
Используя visudo, нажмите Shift+G
и добавьте в конец файла:
deployer ALL=(ALL) NOPASSWD: ALL
затем написать и выйти (:wq
)