2016-07-22 78 views
4

我使用ansible 2.0.2.0從任何計算機更新我的靜態網站。我的劇本上只有本地主機上運行,​​主要有兩個部分:如何使ansible只在要求時要求成爲密碼

  • 特權部分:確保軟件包安裝,基本上是apt任務,become: true
  • 沒有權限的部分:填寫模板,縮小與網絡託管服務同步,實質上command任務沒有become

我寧願將這兩部分放在同一個劇本中,以便在切換電腦時不需要擔心依賴關係。理想情況下,我希望能夠檢查apt軟件包是否已安裝,並且只有在需要安裝任何軟件時纔要求提供密碼。

  • sudo ansible-playbook ...

    其他,我迄今探索和它們的缺點摘要如下不太令人滿意的替代運行無特權的一部分root,要求輸入sudo密碼不需要時;

  • ansible-playbook --ask-become-pass ...:即使不需要安裝新軟件包,也總是詢問sudo密碼;
  • ansible-playbook ...:不合格sudo: a password is required

有什麼辦法來保持特權和非特權的部分以相同的劇本不會不必要鍵入須藤密碼,也不無特權部分施加不必要的特權?

+0

我認爲爲了能夠使用apt來檢查是否符合軟件包依賴性它需要root權限 - 所以即使不需要安裝新的軟件包,您也需要傳遞密碼。 – fishi

回答

0

如果使用--ask-sudo-pass參數運行ansible-playbook,則第二個選項將要求您輸入一次密碼,並在需要時每次都重複使用該密碼。

如果在第一種情況下以sudo的身份運行,那麼您可以在腳本中使用成爲失去您的特權狀態,因爲您需要它。

但是,您可以設置ansible.cfg來遠程安裝到本地主機。因此,您可以設置一個非特權用戶(我使用centos),它可以設置爲sudo而不需要密碼。然後我在centos用戶的authorized_keys中設置我的本地用戶。

因此,您運行非特權(如centos),但是當您需要sudo時,可以使用become_method:sudo來成爲root用戶。

使用此方法,我使用相同的安全劇本安裝裸機,就像我使用遠程AWS安裝一樣。

看着我ansible.cfg我有: -

[defaults] 
hostfile = inventory 
# use local centos account, and ask for sudo password 
remote_user = centos 
#ask_pass = true 
#private_key_file = ~/packer/ec2_amazon-ebs.pem 

我的清單包含: -

[webservers] 
    localhost 

我setup.sh包含: -

ansible-playbook playbook.yml -vvv 
#ansible-playbook --ask-sudo-pass playbook.yml 

因此,所有密碼詢問聲明已關閉。請記住,因爲我沒有在默認情況下指定private_key_file,它假定正在運行的用戶有權ssh到centos @ localhost而不需要密碼