我使用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密码,也不给无特权部分提供不必要的权限?
如果您使用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
无需密码
归档时间: |
|
查看次数: |
2323 次 |
最近记录: |