如何使ansible只在要求时要求成为密码
我使用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
。
有什么办法来保持特权和非特权的部分以相同的剧本不会不必要键入须藤密码,也不无特权部分施加不必要的特权?
如果使用--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而不需要密码
我认为为了能够使用apt来检查是否符合软件包依赖性它需要root权限 - 所以即使不需要安装新的软件包,您也需要传递密码。 – fishi