首页 > 技术文章 > Ansible 运维工具

pzb-shadow 2019-03-12 17:01 原文

 

 

安装方式:

  PIP方式:

    yum install python-pip python-devel -y        #安装python-pip程序包及python-devel

    yum install gcc glibc-devel zlib-devel rpm-build openssl-devel -y         #确保服务器的gcc,glibc开发环境均已安装

    pip install --upgrade pip        #升级本地PIP至最新版本

    pip install ansible -upgrade     #安装Ansible

    #执行ansible --version,有类似返回结果表示安装成功并可正常使用,其他验证安装是否成功的方式也一样,均可执行ansible-version

 

 

  YUM方式:

    #需事先安装EPEL源后方可找到并安装Ansible

    rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm

    #安装Ansible

    yum  install ansible -y

 

 #Ansible主机清单在/etc/ansible/hosts

~]# vim /etc/ansible/hosts

  

 

 #ansible 的主配置文件存放在 /etc/ansible/ansible.cfg,这里就展示我零时配的选项

~]# vim /etc/ansible/ansible.cfg

  

 #shell模块,可以向远程传输shell命令并执行;

 #登陆数据并执行命令,配置如下

~]# ansible Aliyun -m shell -a "mysql  -u{{db_user}}  -p{{db_passwd}}  -e 'show databases;'"

 

自己常用的一些命令:

   #检测所有主机存活情况,all或 * 号功能相同

   ~]# ansible all -m ping

   ~]# ansible '*' -m ping

 

  #多个组之间同时执行,相互之间用“ :”(冒号)分割

   ~]# ansible app:app2 -m ping

 

  #模糊匹配以HuBei开头的所有主机

  ~]# ansible HuBei* -m ping

 

  #copy模块,传输本地文件到对端主机

  ~]# ansible app -m copy -a 'src=local_path dest=goal_path'

 

  #unarchive模块,批量传输文件并解压zip包

  ~]# ansible all -m unarchive -a 'src=7.zip dest=/data/HD/' -s

 

   #authorized_keys模块,批量部署证书文件(先批量创建用户后再执行),回车后输入密钥密码(-s参数表示切换root权限

  ~]# ansible all -m authorized_key -a "user=ben exclusive=true manage_dir=true key='$(</home/ben/.ssh/id_rsa_ben.pub)'" -k -s

 

 

Playbook:

批量创建用户

---
- hosts: "{{ host }}"
  remote_user: root
  gather_facts: False
  sudo: yes

  tasks:
  - name: Create user
    user: name={{ user }}  password={{ password | password_hash('sha512') }} state=present
    #user: name={{ user }}  group={{groups}} password={{ password | password_hash('sha512') }} state=present

  - name: Create ssh directory
    file: path=/home/{{user}}/.ssh state=directory

  - name: Copy authorized_keys
    copy: src=/etc/ansible/user/id_rsa_{{user}}.pub dest=/home/{{user}}/.ssh/authorized_keys mode=0600

  - name: Change user attribute
    file: path=/home/{{user}} owner={{user}} group={{user}} recurse=yes

 执行:ansible-playbook add_user.yml -e "user=test password=123456 host=all"

 

批量删除用户

---
- hosts: "{{host}}"
  remote_user: root
  gather_facts: False
  sudo: yes

  tasks:
  - name: Del user
    user: name={{user}} state=absent remove=yes
    async: 100
    poll: 0
    register: result

  - debug: var=result

  - async_status: jid={{ result.ansible_job_id }}
    register: job_result
    until: job_result.finished
    retries: 30

 执行:ansible-playbook del_user.yml -e "user=test host=all"

 

 

 

解决每次用密钥执行Ansible命令时都要输入密码问题

    Keychain是一个用来方便管理 SSH 密钥对的程序,它能尽最大努力去减少对用户的打扰。实际上,它就是一个 shell 脚本,驱动 ssh-agent 或者 gpg-add 来工作。一个值得注意的特性是,keychain 在多个会话中重复使用同一个 ssh-agent 进程。这意味着您只需要在机器启动时输入一次密码短语即可。

    #使用前要开启vim  /etc/ssh/ssh_config中的一个配置

      ForwardAgent yes

    ~]# systemctl restart sshd

      #获取keychain文件

        ~]# wget http://www.funtoo.org/archive/keychain/keychain-2.7.1.tar.bz2

     ~]# tar -xf keychain-2.7.1.tar.bz2

     ~]# cd keychain-2.7.1

     keychain-2.7.1]# install -m 0755 keychain /usr/bin/

 

    #编辑环境变量,在末尾添加如下两行

     ~]# vim ~/.bash_profile

       eval $(keychain --eval --agents ssh -Q --quiet /apps/ben)
       eval `keychain --eval --agents ssh /apps/ben`  #添加这项配置前要把key文件设置为400权限,否则会报错

      

      

 

参考资料:

 https://wiki.archlinux.org/index.php/SSH_keys_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)#Keychain

 https://www.ibm.com/developerworks/cn/linux/security/openssh/part2/index.html

推荐阅读