2016-05-19 2 views
24

Я взял сервер Ubuntu 14.04. У него есть пользователь, называемый «развертыватель» (используется с capistrano), и поэтому ему нужны привилегии sudo. С помощью этой установки, я могу войти на сервер и делать такие вещи, как:Ansible: создать пользователя с привилегиями sudo

workstation> ssh [email protected] 
myserver> sudo apt-get install git 
myserver> exit 
workstation> 

Я пытаюсь понять, как использовать анзибль (версия 2.0.2.0 и питон 2.7.3), чтобы создать пользователя с именем «Deployer »и иметь возможность входа на сервер с этим идентификатором, а затем так суо-иш-вещи, как« 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 в машину как «Deployer», (например, SSH Установщик @ MYSERVER), но если я запускаю команду Суда, он всегда спрашивает меня для моего пароля sudo.

Я понимаю, что пользователь «развертывателя» в конечном итоге должен найти свой путь в файле пользователей visudo, но я не могу понять, какие магические заклинания Ansible вызываются, чтобы я мог ssh в машину в качестве развертывателя, а затем запустить sudo (например, sudo apt-get install git) без запроса пароля sudo.

Я искал высоко и низко, и я не могу найти фрагмент плеера Ansible, который помещает пользователя «развертыватель» в sudo group, не требуя пароля. Как это делается?

ответ

52

Иногда я знаю, что спросить. Я не знал, как я разработчик, который взял на себя работу DevOps.

По-видимому, «пароль без пароля» или логин NOPASSWD - это то, что вам нужно поместить в файл/etc/sudoers.

Ответ на мой вопрос: Ansible: best practice for maintaining list of sudoers.

анзибль 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 без необходимости указывать пароль.

+33

Пожалуйста, добавьте строку 'validate: 'visudo -cf% s'' в конец раздела' lineinfile: 'для проверки до сохранения. Прошивка файла sudoers заблокирует вас от доступа sudo навсегда. –

+1

'authorized_key' [принимает ключ как строку] (http://docs.ansible.com/ansible/latest/authorized_key_module.html) в параметре' key', так как v1.9 – Tim

+1

Вы также можете создать/скопировать файл в '/ etc/sudoers.d', большинство дистрибутивов по умолчанию включают строку для этого ... –

Смежные вопросы