ansible批量管理服务介绍

01. 批量管理服务知识介绍

  1. ansible是一个基于Python开发的自动化运维工具
  2. ansible是一个基于ssh协议实现远程管理的工具
  3. ansible软件可以实现多种批量管理操作(批量系统配置、批量软件部署、批量文件拷贝、批量运行命令)
  4. saltstack puppet

02. 批量管理服务特征介绍

  1. a ansible软件服务端(管理端):不需要启动任何服务 默认服务端不需要任何的配置
    1. b ansible软件客户端(受控端):没有客户端软件安装

03. ansible软件安装部署

    1)ansible软件自动化环境架构规划

         管理主机1台:

         192.168.179.61   m01

         受控主机3台:

         192.168.179.41   backup

         192.168.179.31   nfs01

         192.168.179.7    web01

         Linux系统 6.9

    2) ansible软件自动化部署条件

         建议基于ssh密钥方式建立远程连接

       a ssh密钥对创建(管理主机)

           ssh-keygen -t dsa

              影响免交互创建密钥对创建因素:

         1)需要指定私钥存放路径

                 -f /root/.ssh/id_dsa

         2)需要进行私钥文件密码设定

                 -N/-P 

                 -N “”/-P “”

              免交互创建密钥对方法

              ssh-keygen -t dsa -f /root/.ssh/id_dsa -N “”

       b 分发公钥文件(管理主机进行分发)

           ssh-copy-id -i /root/.ssh/id_dsa.pub 172.16.1.31

              影响免交互批量分发密钥因素

         1)需要有确认连接过程,需要输入yes/no

                 -o StrictHostKeyChecking=no

                 sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsa.pub “-o StrictHostKeyChecking=no 172.16.1.31”

         2)需要解决密码问题

                 sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsa.pub 172.16.1.31

           Now try logging into the machine, with “ssh ‘172.16.1.31’”, and check in:

             .ssh/authorized_keys

           to make sure we haven’t added extra keys that you weren’t expecting.

              免交互批量分发公钥脚本:

              #!/bin/bash

              ######################

              #删除KEY文件          #

        ######################

        rm -f /root/.ssh/id_dsa*

        ######################

        #创建密钥对           #

        ######################

        ssh-keygen -t dsa -f /root/.ssh/id_dsa -N “”

        ######################

        #分发密钥对           #

        ######################

        for ip in 31 41 7

        do

        sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsa.pub “-o StrictHostKeyChecking=no 172.16.1.$ip”

        done

      c 检查是否可以进行基于密钥远程管理

           ssh 172.16.1.31 uptime

              免交互批量检查测试脚本

              #!/bin/bash

        ######################

        #请输入参数           #

        ######################           

              if [ $# -ne 1 ];then

                 echo “pls input one agrs”

                 exit 1

              fi

        ######################

        #测试                 #

        ######################    

        for ip in 31 41 7

        do

               echo ===== info 172.16.1.$ip=====

               ssh 172.16.1.$ip $1                                   ##$1 表示第一个参数

               echo “”

        done

        测试:(这里$1就是hostname)

              [root@m01 ~]# sh fenfa_check.sh hostname

              ===== info 172.16.1.31=====

              nfs01

              ===== info 172.16.1.41=====

              backup

              ===== info 172.16.1.7=====

              web01

              还可以用以下命令:

              sh fenfa_check.sh “hostname”             #批量查看每个主机的主机名

              sh fenfa_check.sh “free -m”              #批量查看每个主机的内存信息

              sh fenfa_check.sh “uptime”               #批量查看每个主机的负载信息

              sh fenfa_check.sh “yum install libselinux-python -y” #批量安装ansible被管理端软件

补充说明

ssh $1 “exec sh -c ‘cd; umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys && (test -x /sbin/restorecon && /sbin/restorecon .ssh .ssh/authorized_keys >/dev/null 2>&1 || true)'”

1)临时设置一个umash值,设置的值为077

2)利用脚本创建.ssh,目录 test -d .ssh || mkdir .ssh

3)将本地公钥文件中的信息重定向到远程主机的 .ssh/authorized_keys文件中,并授权此文件为600

4)如果客户端改了SSH端口号,可以修改ssh-copy-id

ssh -p”端口号” $1 “exec sh -c ‘cd; umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys && (test -x /sbin/restorecon && /sbin/restorecon .ssh .ssh/authorized_keys >/dev/null 2>&1 || true)'”