• ansible自动化运维工具


    概述

    ansible是一个开源的自动化运维工具,提高运维工程师的工作效率,可以通过本身集成的坟场丰富的模块实现各种管理任务。

    特点

    • 基于Python开发,运维工程师对其二次开发比较容易
    • 丰富的内置模块
    • 管理方式简单
    • 无客户端设计,底层基于ssh通信

    应用
    没有客户端,也不需要在被管理主机上添加任何代理程序,通过ssh完成底层通信,其要求管理必须是linux系统,在管理节点通过应用模块将指令发送到被管理主机,并在执行完自动删除产生的临时文件

    控制ansible

    • CMDB:CMDB系统存储和管理着企业it架构中的各种配置信息,是构建 ITL 项目核心工具。运维人员可以组合 CMDB 和 ansible ,通过CMDB直接下发指令调用ansible工具完成操作者锁希望达到的目标.
    • PUBLIC/PRIVATE 方式:提供了丰富的api语言接口。支持PHP,Python等,开发语言
    • Ad-Foc命令集:Users直接通过Ad-Hoc命令集调用ansible工具来完成
    • playbooks:类似于shell脚本,集合命令,分步执行

    ansible工具集合

    • ansible playbooks:任务脚本,编排定义ansible任务集的配置文件,由Ansible按序次执行,通常是json格式的yml/yaml文件
    • inventory:ansible管理主机清单
    • moudle:ansible执行命令工能模块,多数为内置的核心模块也可以用户自定义
    • api:提供第三方程序调用的应用程序编程接口

    作用对象
    不仅仅可以是linux和非linux系统的主机,也可以作用与各种的public/private,商业和非商业设备的网络设施

    流程
    ansible与其他服务器使用密钥免交互登录,就可以直接使用了

    ansible的搭建-免交互连接

    192.168.200.20  ansible
    192.168.200.21  client1
    192.168.200.21  client2
    
    yum -y install ansible 
    
    #因为ansible是基于Python使用的,所以可以使用pip来安装,不过需要部署Python环境
    #关闭防火墙三件套
    
    ssh-keygen -t rsa  #生成ssh秘钥对
    
    

    client端环境准备

    ssh-copy-id root@192.168.200.21
    ssh-copy-id root@192.168.200.22
    

    基于sshpass分发密钥

    yum -y install sshpasss
    
    #之间远程连接某主机
    sshpasss -p[密码] ssh {用户名}@{主机IP}
    
    #远程连接指定ssh端口
    sshpass -p{密码} ssh -p ${端口}{用户名}@{主机IP}
    
    #从密码文件读取主机内容作为密码去远程连接主机
    sshpass -f ${密码文件} ssh{用户名}@{主机ip}
    
    #从远程主机上拉取文件到本地
    sshpass -p{密码} scp {用户名}@{主机IP}:${远程主机目录}${本地主机目录}
    
    #远程连接主机并执行命令
    sshpass -p{密码} ssh -o StrictHostKeyChecking=no {用户名}@{主机IP} 'rm -rf /tmp/test' 
    -o StrictHostKeyChecking=no  #忽略密码提示
    
    

    测试免密连接

    ssh root@192.168.200.21
    exit  #退出
    

    ansible配置
    inventory是ansible管理主机信息的配置文件,默认存储于/tmp/ansible/hosts。

    cp /etc/ansible/hosts{,.bak}
    vim /etc/ansible/hosts
    [linuxwei]
    192.168.200.21
    192.168.200.22
    
    #测试
    ansible -i /etc/ansible/hosts linuxwei -m ping
    
    
    #直接在配置文件写入密码
    client1 ansible_ssh_host=192.168.200.21 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=root123
    
    #此时不需要密钥也可以连接
    
    #-i 配置文件是默认的,可以省略
    ansible linuxwei -m ping
    

    第一次连接会有交互,可以直接yes

    修改ssh配置文件的ssh_config,解决known_hosts问题

    sed -n '35p' /etc/ssh/ssh_config
    vim +35 /etc/ssh/ssh_config
    systemctl reload sshd
    

    ansibel模块

    command模块

    • chdir:在远程主机上运行命令前要提前进入目录
    • creates:在命令运行时创建一个文件,如果文件已经存在,则不会创建任务
    • removes:在命令运行时移除一个文件,如果文件不存在,咋不会执行
    • execcuteble:致命运行命令的shell程序
    #两台client主机上创建用户whml,在ansible上查看
    ansible all -m commmand -a "chdir=/home ls"
    ansible linuxwei -a "uptime"
    

    shell模块
    也称为全能模块,支持shell特性,如管道,重定向等

    • 重定向
      ansible linuxwei -m shell -a 'echo "whml" > /tmp/test.txt'
      ansible linuxwei -m shell -a 'cat /tmp/test.txt'
      
    • 测试管道符
      ansible linuxwei -m shell -a 'ifconfig ens33 | awk "/ether/{print $2}"'
      

    raw模块
    最原始的方式运行命令

    #清除yum缓存
    ansible all -m raw -a "yum clean all"
    
    #安装nmap包
    ansible all -m raw -a "yum -y install nmap"
    

    copy模块
    用于复制指定主机文件到远程主机的指定位置,使用时,管理节点必须安装libselinux-python包

    • dest:指出复制文件的目标目录位置,使用绝对路径,如果目标文件已有,则会覆盖
    • src:指出源文件的路径,可以使用相对路径或者绝对路径,支持直接指定目录
    • mode:指出复制时,权限
    • owner:属主
    • group:属组
    • content:指出复制到目标主机上的内容
    #将linuxwei组中主机的/etc/hosts 文件拷贝到/tmp 下 指定权限为777 更改属主为Linuxwei 属组为 root
    ansible linuxwei -m copy -a "src=etc/hosts dest=/tmp/ mode=777 owner=linuxwei group=root"
    

    hostname模块
    用于管理远程主机上的主机名
    name:指明主机名

    #更改client1(21)主机为linux
    ansible client1 -m hostname -a "name=linux"
    

    yum模块
    基于yum机制,对远程主机管理程序包

    • name:程序包的名称,可以带上版本号
    • state=present|latest|absent:指明对程序包的操作,安装|安装最新|卸载
    • disablerepo:在用yum安装时禁用某个仓库的ID
    • enablerepo:安装时启动某个参考的ID
    • conf_file:yum运行时的配置文件而不是默认的配置文件
    • diable_gpg_check=yes|no:是否用完整性校验功能
    #client安装dhcp
    ansible linuxwei -m yum -a "name=dhcp state=present"
    

    service模块
    用来管理远程主机上的服务的模块

    • name:被管理的服务名称
    • state=stated|stopped|restarted:启动|关闭|重启
    • enabled=yes|no:是否开机自启动
    • runlevel:如果设定了开机自启动,定义哪些目标开机自启动
    #启动httpd服务并设置开机自启
    ansible linuxwei -m service -a "name=httpd state=stated enabled=yes"
    #在client端查看
    ps -aux | grep yum | grep -v grep 
    

    user 模块
    – home:指定用户的家目录,需要与createhome配合使用。
    – groups:指定用户的属组。
    – uid:指定用的uid。
    – password:指定用户的密码。
    – name:指定用户名。
    – createhome:是否创建家目录 yes|no。
    – system:是否为系统用户。
    – remove:当state=absent时,remove=yes则表示连同家目录一起删除,等价于userdel -r。
    – state:是创建还是删除。(present,absent)
    – shell:指定用户的shell环境。
    – generate_ssh_key:是否为相关用户生成SSH密钥。 这不会覆盖现有的SSH密钥。
    – ssh_key_bits:可选择指定要创建的SSH密钥中的位数。
    – ssh_key_passphrase:设置SSH密钥的密码。 如果没有提供密码,SSH密钥将默认没有密码。
    – ssh_key_file:指定SSH密钥文件名(可选)。 如果这是一个相对的文件名,那么它将是相对于用户的主目录。
    – ssh_key_type:指定要生成的SSH密钥的类型(可选)。 可用的SSH密钥类型将取决于目标主机上的实现。

    script模块
    能够实现远程服务器批量运行本地的shell脚本

  • 相关阅读:
    Java 在线/离线 文档
    Java集合框架全解
    【LeetCode】204.计数质数
    深入SpringMvc
    SpringMvc基础
    SSM整合
    Spring注解
    SpringAop编程
    2路插入排序
    Matplotlib绘图库简要介绍
  • 原文地址:https://www.cnblogs.com/wml3030/p/15572645.html
Copyright © 2020-2023  润新知