• Centos7安装ansible


    CentOS下部署Ansible自动化工具

    1.确保机器上安装的是 Python 2.6 或者 Python 2.7 版本:

    python -V

    wKioL1kvfCbzO0vTAAAKtYgsq-I214.png

    2.查看yum仓库中是否存在ansible的rpm包

    yum list|grep ansible

    若不存在或是低版本可更换yum源或者采用源码安装

    阿里云的yum源:http://mirrors.aliyun.com/repo/  备份源文件,然后下载对应的版本至/etc/yum.repos.d/目录即可,如epel-6.repo (通过该yum源安装ansible会依赖python 2.6,如果python版本是2.7以上可能会安装失败)

    wKioL1kvfDSR3cZzAAAZ7DNP8sQ445.png

    3.安装ansible服务:

    yum install ansible -y

    4.修改ansible配置和主机列表hosts:

    1)关闭第一次使用ansible连接客户端时输入命令提示:

    sed -i "s@#host_key_checking = False@host_key_checking = False@g" /etc/ansible/ansible.cfg

    指定日志路径:

    sed -i "s@#log_path = /var/log/ansible.log@log_path = /var/log/ansible.log@g" /etc/ansible/ansible.cfg

    2)将所有主机ip加入到/etc/ansible/hosts文件中:

    定义主机组和主机

    wKiom1kvfEPSL34_AAALDgKvzmI430.png

    默认ssh的端口为22端口,如果为其他端口号,可在主机名后面加上端口号,如 192.168.159.131:9604 ,也可以修改配置文件中的remote_port变量值

    /etc/ansible/hosts也可以定义一个主机范围,如192.168.159.[100:200] ,表示192.168.159.100 - 192.168.159.200 的主机

    5.创建和配置 SSH 公钥认证(免密码登录):

    ssh-keygen -t rsa

    按提示使用默认配置一路回车即可:

    wKioL1kvfFHSTklVAAA-V5vepVg800.png

    6.通过ansible将公钥分发至各主机上:

    ansible all -m authorized_key -a "user=root key='{{ lookup('file', '/root/.ssh/id_rsa.pub') }}' path=/root/.ssh/authorized_keys manage_dir=no" --ask-pass -c paramiko

    wKioL1kvfF7T4VlnAACF1MzgY-E291.png

    需要输入主机的密码,若是有的主机密码不一致,那么该主机会分发失败,此时只需再执行一遍命令输入该主机密码即可。或者先将密码相同的主机进行分组,然后依次指定主机组执行命令分批分发公钥。

    此命令是通过追加的方式来推送公钥至authorized_keys,所以不用担心原来的文件内容会被覆盖。

    到任意一台主机上查看,可以看到公钥已成功推送:

    wKiom1kvfHChwbWpAABIQ5dXUGY294.png

    7.修改ansible配置,指定私钥文件路径:

    sed -i "s@#private_key_file = /path/to/file@private_key_file = /root/.ssh/id_rsa@g" /etc/ansible/ansible.cfg

    8.测试:

    wKiom1kvfHzjd6XfAAAMsSxk49U677.png

    可以在命令后面加上-vvvv参数查看详细的输出结果,尤其是在命令执行失败需要排错的时候非常有用。

    9.自动化安装脚本:

    注意:

    ①执行脚本前需要配置/root/hosts主机列表文件,内容如:

    [root@localhost ~]# cat /root/hosts

    [app]

    192.168.159.130

    [web]

    192.168.159.131

    ②脚本分发公钥至远程主机时会提示输入远程主机的密码

    ③脚本通过yum方式安装

    脚本内容:

    #!/bin/bash 

    ############################################# 
    # author:ellen 
    # describes:自动化安装和配置ansible 
    # version:v1.0 
    # updated:20170531 
    ############################################# 

    # 主机列表文件 
    hostfile='/root/hosts'
    # 错误信息以红色显示 
    function _err 

    echo -e "33[1;31m[ERROR] $@33[0m"

    # 一般信息以绿色显示 
    function _info 

    echo -e "33[1;32m[Info] $@33[0m"

    # 仅限指定用户运行本脚本 
    if [ $EUID != "0" ];then
    echo "Please use root run script!!!"
    exit 1 
    fi
    rpm -qa|grep ansible 
    if [ $? -eq 0 ];then
    _err "ansible 已存在,无需重复安装!退出..."
    exit 1 
    fi
    if [ -e $hostfile ];then
    yum list|grep ansible 
    if [ $? -ne 0 ];then
    _err "仓库不存在ansible的rpm包,退出..."
    exit 1 
    else
    yum install ansible -y 
    if [ $? -eq 0 ];then
    _info "ansible 安装完毕..."
    sed -i "s@#host_key_checking = False@host_key_checking = False@g" /etc/ansible/ansible.cfg 
    sed -i "s@#log_path = /var/log/ansible.log@log_path = /var/log/ansible.log@g" /etc/ansible/ansible.cfg 
    cp $hostfile /etc/ansible/hosts
    _info "$hostfile 已拷贝至 /etc/ansible/目录"
    ssh-keygen -t rsa -P '' -f /root/.ssh/id_rsa
    _info "请按以下提示输入 ${hostfile} 列表中的主机密码:"
    ansible all -m authorized_key -a "user=root key='{{ lookup('file', '/root/.ssh/id_rsa.pub') }}' path=/root/.ssh/authorized_keys manage_dir=no" --ask-pass -c paramiko 
    sed -i "s@#private_key_file = /path/to/file@private_key_file = /root/.ssh/id_rsa@g" /etc/ansible/ansible.cfg 
    _info "ansible 已部署完毕!"
    else
    _err "ansible 安装失败!"
    fi
    fi
    else
    _err "$hostfile 主机列表文件不存在,请检查!"
    exit 1 
    fi

     ansible命令:

    在另外两台机上执行ping命令:ansible group1 -m ping

    复制本机文件到组group1:ansible group1 -m copy -a “src=/etc/hosts dest=/etc/”

    帮group1安装软件:ansible group1 -m shell -a “yum install wget -y”

    ansible myservers -a 'pwd

    ansible myservers -m script -a "/opt/app/target.sh"

    参考:https://www.linuxidc.com/Linux/2017-06/144430.htm

  • 相关阅读:
    2018.5.27 OraclePLSQL编程 if-else练习和循环结构练习
    桶排序
    从函数中返回引用
    函数返回值
    参数传递模式
    计数排序(不基于比较的排序算法)
    快排序
    堆用作优先队列
    堆排序
    合并算法
  • 原文地址:https://www.cnblogs.com/jackyzm/p/9578005.html
Copyright © 2020-2023  润新知