2016-05-19 149 views
24

我已經接管了Ubuntu 14.04服務器。它有一個叫做「部署者」(用於capistrano)的用戶,因此它需要sudo權限。有了這個設置,我可以登錄到服務器和做的東西,如:Ansible:使用sudo權限創建用戶

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

我試圖找出如何使用Ansible(版本2.0.2.0和Python 2.7.3)創建一個用戶名爲「部署「並能夠使用該ID登錄到服務器,然後像sudo-ish那樣的」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部署@ myserver的),但如果我運行sudo命令,它總是問我爲我的sudo密碼。

我知道「部署者」用戶最終必須找到它進入visudo用戶文件的方式,但我無法弄清楚要調用哪個神奇的Ansible咒語,以便我可以作爲部署者ssh進入機器,然後運行sudo命令(例如sudo apt-get install git「),而不會提示你輸入sudo密碼。

我已經搜索了高和低,我似乎無法找到一個Ansible的劇本片段,把用戶」部署者「如何做到這一點?

回答

52

有時候知道該問什麼,我不知道,因爲我是一位開發人員,已經參與了一些DevOps的工作

顯然「無密碼」或NOPASSWD登錄是你需要放在/ etc/sudoers文件中的東西。

我的問題的答案是Ansible: best practice for maintaining list of sudoers

的Ansible劇本的代碼片段看起來像這樣從我的問題:

- 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當playbook在後續運行時。是的,我能夠以「部署者」的身份登錄到服務器,並且無需輸入密碼即可運行sudo命令。

+33

請在'lineinfile:'部分的末尾添加'validate:'visudo -cf%s''這一行,以便在保存之前進行驗證。搞砸sudoers文件將永久鎖定你sudo的訪問權限。 –

+1

自v1.9以來''key'參數'authorized_key' [接受密鑰爲字符串](http://docs.ansible.com/ansible/latest/authorized_key_module.html) – Tim

+1

您也可以創建/複製文件在'/ etc/sudoers.d'中,大多數發行版都默認包含這個行... –