使用ansible 也有好长时间了,以前的机器都是做好的模板,配置了ssh 无密码登陆,推送起来一般很方便。今天闲来无事,刚好手头也有个事情做,将明文密码推送的样例贴出来共享。




直入主题,

需求:修改一批机器的Hosts 文件,需要sudo 权限,并且sudo 账号(我这里是centos账号,)没有配置ssh 无密码登陆。(但是centos 账号都已经在/etc/sudoers 里面加过sudo 权限)







这里本人想偷懒,不想一台台再去配置免密钥ssh 登陆,就索性用ansible 明文密码推送来完成这个功能。

注:关于ansilbe 的安装,yml 文件使用,ssh 免秘钥登陆,hosts 文件入门配置不在本文讲解范围内。入门帖子应该网上是巨多的。






第一步:配置/etc/ansible/hosts 文件,设置管理组;

ansible 批量推送 ansible_ssh_pass + ansible_sudo_pass+ become 使用案例_第1张图片






第二步:配置yml 文件,批量执行需要的动作


ansible 批量推送 ansible_ssh_pass + ansible_sudo_pass+ become 使用案例_第2张图片






第三步:ansible-playbook 批量执行:

ansible 批量推送 ansible_ssh_pass + ansible_sudo_pass+ become 使用案例_第3张图片

ansible 批量推送 ansible_ssh_pass + ansible_sudo_pass+ become 使用案例_第4张图片




关键点补充说明:

  1. 官方文档:http://docs.ansible.com/ansible/become.html



  1. 关于become 的使用,当需要执行某些特殊操作需要专门权限时,可以用become_user那强调切换,同时1.9 版本以前的sudo_user 也依然保留使用;


ansible 批量推送 ansible_ssh_pass + ansible_sudo_pass+ become 使用案例_第5张图片


2.当使用了beocome_user时,并且指定需要sudo,需要在hosts 文件指定ansible_sudo_pass 密码,否则become_user 使用sudo 进行操作时无权限执行,不会成功。比如我这里用centos 账号执行 echo "127.0.0.1 $(hostname)" >>/etc/hosts 需要sudo 权限的,所以用 become_user: root,并且指定了ansible_sudo_pass 密码,这样就可以顺利的执行了。


ansible 批量推送 ansible_ssh_pass + ansible_sudo_pass+ become 使用案例_第6张图片

ansible 批量推送 ansible_ssh_pass + ansible_sudo_pass+ become 使用案例_第7张图片



最后贴上yml文件以供参考:


---


- hosts: office-zhaoman-spider


  sudo_user: centos


  sudo: yes


  tasks:


  - name: echo /etc/hosts


    shell:  echo "127.0.0.1  $(hostname) " >> /etc/hosts 


    ignore_errors: True


    become: true

    become_user: root



  - name: cat  /etc/hosts


    shell:   cat  /etc/hosts 


    ignore_errors: false




  - shell: cat /etc/hosts


    register: ps


  - debug: var=ps.stdout_lines