如何使ansible只在需要时要求成为密码

use*_*136 10 ansible

我使用ansible 2.0.2.0从任何计算机更新我的静态网站.我的playbook只在localhost上运行,基本上有两部分:

  • 特权部分:确保安装包,基本上是apt任务become: true
  • 非特权部分:填写模板,缩小并与网络托管服务同步,基本上command没有任务become.

我宁愿在同一个剧本中使用这两个部分,这样我就不必担心切换计算机时的依赖性.理想情况下,我希望ansible检查apt软件包是否已安装,如果需要安装任何密码,则只询问密码.

到目前为止我探索过的其他不太令人满意的替代方案及其缺点如下:

  • sudo ansible-playbook ...:运行非特权部分root,在不需要时询问sudo密码;
  • ansible-playbook --ask-become-pass ...:总是询问sudo密码,即使不需要安装新软件包;
  • ansible-playbook ...:失败了sudo: a password is required.

有没有办法将特权和非特权部分保存在同一个剧本中,而不必不必输入sudo密码,也不给无特权部分提供不必要的权限?

sib*_*baz 5

如果您使用ansible-playbook--ask-sudo-pass参数运行,那么您的第二个选项将询问您一次密码,并在每次需要时重复使用该密码。

如果像第一种情况一样运行 sudo ,那么您可以在脚本中使用变为,根据需要失去您的特权状态。

但是,您可以设置ansible.cfg远程安装到localhost. 因此,您可以设置一个非特权的 ansible 用户(我使用centos),该用户设置为sudo不需要密码。authorized_keys然后我在用户中设置本地用户centos

因此,您以非特权方式运行(如centos),但是当您需要 sudo 时,您可以使用become_method: sudo成为 root。

使用这种方法,我使用相同的 ansible playbook 进行裸机安装,就像进行远程 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
Run Code Online (Sandbox Code Playgroud)

我的inventory.yml包含:-

[webservers]
  localhost
Run Code Online (Sandbox Code Playgroud)

我的setup.sh包含:-

ansible-playbook playbook.yml -vvv
#ansible-playbook --ask-sudo-pass playbook.yml
Run Code Online (Sandbox Code Playgroud)

因此,所有询问密码的语句都被关闭。请记住,由于我没有private_key_file在默认值中指定 a,因此它假定正在运行的用户有权进行 ssh 访问而centos@localhost无需密码

  • 不确定,但现在是 `--ask-become` 而不是 `--ask-sudo-pass` (3认同)