zoukankan      html  css  js  c++  java
  • Ansible批量自动化管理工具入门

    一、虚拟机版本

    1、需要利用7.5版本虚拟机 
    2、7.5版注意事项:

    【2.1】、网卡名叫ens32同样配置文件也是ens32
    【2.2】、命令:systemctl 统一管理命令,
    例,systemctl stop iptables.service 关闭防火墙
    【2.3】、设置开机自启动防火墙:systemctl  enable firewalld
    【2.4】、设置开机关闭防火墙(必须关闭)   :systemctl disable firewalld 
    【2.5】、必    须     关     闭      :systemctl disable  NetworkManager
    【2.6】、yum得配置文件全部可以用
    【2.7】、重启虚拟机,ifup ens32 启动网卡来获取ip
    
     

    二、常见的批量管理工具

    生产环境Ansible管理服务器ssh登陆安全策略 
    1、ansible (非常简单,很多企业都在用) 适用于管理500台以下的服务器,特点是一台虚拟机管理多台虚拟机,不需要安装任何客户端。利用得是ssh通道,操控要用免密钥。

    1.1、安装ansible软件同时会自动安装sshpass
    yum -y install epel-release
    yum -y install ansible
    1.2、修改ssh登录
    1.2.1、vim /etc/ssh/ssh_config 修改第35行 StrictHostKeyChecking ask改为no
    1.2.2、vim /etc/ssh/sshd_config 
    第17行  #Port 22   #修改ssh连接端口 (工作中改成一万以上)
    第38行  #PermitRootLogin yes    #是否允许root账号远程登陆 (工作中必须关闭)
    第43行  #PubkeyAuthentication yes   #是否开启公钥连接认证 (工作中开启)
    第47行  AuthorizedKeysFile  .ssh/authorized_keys    #公钥文件的放置位置 
    第65行  PasswordAuthentication yes  #是否开启密码验证登陆 
    第79行  GSSAPIAuthentication yes    #是否关闭GSSAPI认证 (工作中关闭)提高ssh解析速度
    第115行  #UseDNS yes                 #是否关闭DNS反向解析 (关闭) 加快ssh得连接速度
    1.2.3、ansible配置文件 /etc/ansible/hosts
    /etc/ansible/hosts
    vim /etc/ansible/hosts
    [nginx]
    WebA ansible_ssh_host=IP地址
    WebB ansible_ssh-host=IP地址
    
     

    三、模块使用

     

    一、ansible <被操控的主机或主机组或all> [-m 模块名] [-a 具体命令]

     

    二、/etc/ansible/hosts文件中可以定义被管理主机,Ansible通过读取/etc/ansible/hosts文件内定义的主机清单批量做一些操作。比如定义一个nginx组,包含一台主机Web01,再定义一个apache组,包含另一台主机Web02.

    [root@ansible ~]# cat /etc/ansible/hosts
    [nginx]
    Web01 ansible_ssh_host=192.168.200.184
    Web02 ansible_ssh_host=192.168.200.185
    

    说明: 
    ansible_ssh_host:被管理主机IP 
    ansible_ssh_user:被管理主机用户名 
    ansible_ssh_pass:被管理主机用户的登陆密码 
    ansible_sudo_pass:被管理主机用户sudo时的密码

     

    三、设置SSH免密码登陆

    为了避免Ansible下发指令时需要输入被管理主机的密码,可以通过证书签名达到SSH无密码登陆。使用ssh-keygen产生一对密钥,并通过ssh-copy-id命令来发送生成的公钥。

    [root@ansible ~]# ls ~/.ssh/
    authorized_keys  id_rsa  id_rsa.pub
    [root@ansible ~]# ssh-copy-id 192.168.200.184
    [root@ansible ~]# ssh-copy-id 192.168.200.185
    
     

    四、ansible查看帮助

    [root@ansible ~]# /usr/local/python/bin/ansible-doc -l 查看总帮助 
    [root@ansible ~]# /usr/local/python/bin/ansible-doc -s shell 查看shell模块的帮助

    1、ping模块:Ansible中使用ping模块来检测指定主机的连通性

    【1】、Ansible中使用ping模块来检测指定主机的连通性
    ansible Web01 -m ping
    绿色表示连通的,红色表示不通
    只要做了免密钥就可以直接登录用户。ansible 被管理范围 -m 模块名  -a 具体命令
    【2】、saltstack (复杂)适用于管理1000-40000台服务器
    【3】、puppet(超级复杂)
    

    2、command模块:在远程主机执行命令,不支持管道符和重定向等复杂命令,可完全被shell模块替代

    例:ansible Web01 -m command -a 'hostname -I'
    查看Web01服务器的ip地址
    

    3、shell模块:Ansible中的shell模块可以在被管理主机上运行命令,并支持像管道符重定向这样的复杂命令。

    例1:ansible Web01 -m shell -a 'useradd yunjisuan'
    在Web01上创建用户yunjisuan
    例2:ansible Web01 -m shell -a 'echo 123123 | passwd --stdin yunjisuan'
    给Web01上yunjisuan用户非交互方式设定密码
    

    4、cron模块:Ansible中的cron模块用于定义任务计划。主要包括两种状态(state);

    【4.1】crontab时间周期: 如果不指定周期,默认是*号
    minute:分钟
    hour:小时
    day:日期
    month:月份
    weekday:周期
    【4.2】crontab任务: 
    job:指明运行的命令是什么
    【4.3】crontab任务描述: 必须写
    name:定时任务描述(定时任务清除的依据)
    【4.4】state状态: 添加或删除定时任务,不写默认是添加
    present:表示添加(省略状态时默认使用);
    absent:表示移除;
    【4.5】crontab任务的用户身份: 
    user:指定定时任务以哪个用户身份执行,如果不指定默认是root用户
    
    例1、添加定时任务计划,在所有被管理的主机里每十分钟输出hello字符串,定时任务描述为test cron job
    ansible all -m cron -a 'minute="*/10" job="/bin/echo hello" name="test cron job"'
    
    例2、删除描述为test cron job的定时任务
    ansible all -m cron -a 'minute="*/10" job="/bin/echo hello" name="test cron job" state=absent'
    
    例3、给Web01服务器上的普通用户yunjisuan添加一个定时任务
    ansible all -m cron -a 'minute="*/10" job="/bin/echo hello" name="test cron job"   user="yunjisuan"'
    

    5、copy模块:Ansible中的copy模块用于实现文件复制和批量下发文件。其中使用src来定义本地源文件路径;使用dest定义被管理主机文件路径;backup=yes表示备份以下对方的文件。使用content则是使用指定信息内容来生成目标文件。

    例1、把WebB服务器上的/tmp/test目录复制到/root/下
    ansible WebB -m copy -a ‘src=/tmp/test  dest=/root’
    
    例2、把WebB服务器上的/tmp/test目录备份一下在复制到/root/下
    ansible WebB -m copy -a ‘src=/tmp/test  dest=/root  backup=yes’
    

    6、script模块:Ansible中的script模块可以将本地脚本复制到被管理主机的内存中并运行,不会在被管理主机中留下脚本文件。

    例1、编写一个脚本,然后通过ansible的script模块远程向被管理主机执行此脚本
    echo 'echo "1111" >> /tmp/test' >> /tmp/test.sh
    ansible WebA -m script -a '/tmp/test.sh'
    

    7、 yum模块:利用yum模块安装软件包,虽然能被shell模块替代 
    但是用yum模块更显专业一些

    【7.1】软件包名: 
    name:指定软件包的名字
    state状态: 
    present:安装软件包(默认就是这个)
    absent:卸载软件包
    
    例1、安装nmap软件包
    ansible all -m yum -a 'name=nmap'
    
    例2、卸载nmap软件包
    ansible all -m yum -a 'name=nmap state=absent'
    

    8、service模块:利用service模块管理服务程序,虽然能被shell模块替代 
    但是用service模块更显专业一些

    【8.1】服务名称: 
    name:指定服务的名字
    【8.2】state状态: 
    started:启动服务
    stopped:停止服务
    restarted:重启服务
    reloaded:平滑重载
    【8.3】enabled开机自启动: 
    true:设置开机自启动
    false:设置开启不启动
    例1、启动firewalld并设置开机自启动
    ansible Web01 -m service -a 'name=firewalld state=started enabled=true'
    
    例2、关闭firewalld并设置开机不启动
    ansible Web01 -m service -a 'name=firewalld state=stopped enabled=false'
    

    9、user模块:用户管理模块。管理用户账号,批量创建用户

    【9.1】指定用户名 
    name:指定操作的用户的名字
    【9.2】用户描述 
    comment:指定用户的描述信息
    【9.3】createhome:是否创建家目录
    【9.4】uid:指定用户的uid号
    【9.5】groups:指定用户的附加组(默认创建和用户名相同的组)
    【9.6】password:指定用户的密码
    【9.7】update_password:更新用户的密码
    【9.8】shell指定用户的登陆方式 
    /bin/bash:能登录系统
    /sbin/nologin:不能登录系统
    【9.9】home:指定用户的家目录路径
    【9.10】state状态: 
    present:创建用户(默认就是这个)
    absent:删除用户
    【9.11】remove:当指定state=absent时,确认是否删除用户家目录 
    true
    false
    
    例1、在Web02上创建一个普通用户yunjisuan,并设置用户的密码为123123
    ansible Web02 -m user -a 'name=yunjisuan comment="welcom to yunjisuan" uid=1066  password=123123 shell=/bin/bash home=/home/yunjisuan'
    
    注:利用ansible的user模块状态用户时要注意在password参数的后边添加密文,否则不能登陆用户 
    通过Python的pip程序安装passlib即可为密码加密
    例2、安装Python2的pip工具,并通过pip工具安装Python的加密模块来给密码加密
    yum -y install epel-release
    yum -y install python2-pip
    pip install passlib (python装一个支持程序passlib)
    
    生成密文密码
    python -c "from passlib.hash import sha512_crypt;import getpass;print sha512_crypt.encrypt(getpass.getpass())"
    
    Password:       #输入你想要加密的密码
    $6$rounds=656000$Tw15COd8DLh/VS94$Mcmz/8CcjBKiEl0mYHcOQQCxEA5mz66EcGH2qXVk6o.Sm7FsRS.DsDVy6ET8iI6jDa045I94slZqWFwyYnRSW1          #加密后的密码
    
    把加密的暗文复制到刚才password=暗文
    
    例2、删除之前创建的yunjisuan用户,并删除它的家目录
    ansible Web02 -m user -a 'name=yunjisuan state=absent remove=true'
    

    10、setup模块:Ansible中使用setup模块收集,查看被管理主机的facts(facts是Ansible采集被管理主机设备信息的一个功能)。每个被管理主机在接收并运行管理命令之前,都会将自己的相关信息(操作系统版本,IP地址等)发送给控制主机

    例1、查看所有远程主机的facts信息
    ansible all -m setup | head     (all表示所有)
  • 相关阅读:
    DC中为什么要用Uniquify?
    hdu 1596 find the safest road
    hdu2112 HDU Today
    hdu 2066 一个人的旅行
    poj 3026 Borg Maze
    poj 1979 Red and Black
    poj 1321 棋盘问题
    hdu 1010 Tempter of the Bone
    hdu 4861 Couple doubi
    codeforces584B Kolya and Tanya
  • 原文地址:https://www.cnblogs.com/mendermi/p/9904719.html
Copyright © 2011-2022 走看看