linux学习-week13--综合架构批量管理服务 ansible

  1. 综合架构知识概述说明

    1. 企业防范入侵方法
    2. 了解批量管理服务
    3. 部署批量管理服务
    4. 批量管理服务配置 /etc/ansible/hosts
    5. 批量管理模块应用
    6. 批量管理剧本功能 自动化
    7. 批量管理角色功能
  2. 综合架构课程回顾:

    1. 远程管理服务介绍 ssh(22) telnet(23)
    2. 远程管理连接原理 私钥 公钥
    3. 远程连接方式介绍 基于密码 基于密钥
    4. 基于密钥远程连接 创建密钥(ssh-keygen) 分发密钥(ssh-copy-id)
    5. 批量分发密钥方法 编写脚本
  3. 远程服务防范入侵案例
    1、用密钥登录,不用密码登陆。
    2、牤牛阵法:解决SSH安全问题
    a.防火墙封闭SSH,指定源IP限制(局域网、信任公网)
    b.开启SSH只监听本地内网IP(ListenAddress 172.16.1.61)。
    3、尽量不给服务器外网IP
    4、最小化(软件安装-授权)
    5、给系统的重要文件或命令做一个指纹
    6、给他锁上 chattr +i +a

  4. 远程连接配置信息
    vim /etc/ssh/sshd_config
    Port 52113 --- 修改服务端口信息
    ListenAddress 0.0.0.0 --- 指定监听地址信息(监听地址指定配置本地主机网卡上有的地址)
    PermitRootLogin yes --- 是否允许root进行登录
    PasswordAuthentication yes --- 是否支持密码连接

    PermitEmptyPasswords no --- 是否使用空密码连接主机

    GSSAPIAuthentication no --- 加快SSH连接效率
    UseDNS no

  5. 批量管理服务概念介绍 (saltstack puppet)
    ansible批量管理服务概述

    1. 是基于python语言开发的自动化软件工具
    2. 是基于SSH远程管理服务实现远程主机批量管理
      ansible批量管理服务意义
    3. 提高工作的效率
    4. 提高工作准确度
    5. 减少维护的成本
    6. 减少重复性工作
      ansible批量管理服务功能
    7. 可以实现批量系统操作配置
    8. 可以实现批量软件服务部署
    9. 可以实现批量文件数据分发
    10. 可以实现批量系统信息收集
      ansible批量管理服务特点
    11. 管理端不需要启动服务程序(no server)
    12. 管理端不需要编写配置文件(/etc/ansible/ansible.cfg)
    13. 受控端不需要安装软件程序(libselinux-python)
    14. 受控端不需要启动服务程序(no agent)
    15. 服务程序管理操作模块众多(module)
    16. 利用剧本编写来实现自动化(playbook)

    学习ansible:

    1. 主机清单配置: https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html
    2. 模块功能应用:
    3. 剧本编写功能:
  6. ansible软件安装部署
    第一个历程: 安装部署软件
    m01: yum install -y ansible

    第二个历程: 进行测试连接
    编写主机清单文件

    tail -3 /etc/ansible/hosts

    172.16.1.7
    172.16.1.31
    172.16.1.41

    ansible all -m ping

    172.16.1.31 | SUCCESS => {
    "ansible_facts": {
    "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
    }

  7. ansible软件主机清单配置
    配置方式一: 直接编写主机IP地址
    172.16.1.7
    172.16.1.31
    172.16.1.41

    配置方式二: 进行分组配置
    [rsync-server]
    172.16.1.41

    [rsync-client]
    172.16.1.31
    172.16.1.7

    配置方式三: 进行变量配置(剧本)
    变量设置方法一: 指定主机调用变量信息
    172.16.1.41 ansible_user=root ansible_password=654321 ansible_port=22
    变量设置方法二: 将组中所有主机统一设置变量信息
    [rsync-server]
    172.16.1.41
    [rsync-server:vars]
    ansible_user=root
    ansible_password=654321
    ansible_port=22

    配置方式四: 将多个组进行整合
    [rsync:children]
    rsync-server
    rsync-client

    [rsync-server]
    172.16.1.41

    [rsync-client]
    172.16.1.31
    172.16.1.7

    配置方式五: 将多个连续的主机进行符号匹配
    [oldboy]
    172.16.1.[1:4]

    调整远程连接用户权限配置
    ansible_become --- 是否激活su 或者 sudo功能
    ansible_become_method --- 具体使用什么方法提升普通用户权限 su/sudo
    ansible_become_user --- 变成什么指定用户进行操作 root
    ansible_become_password --- 指定用户密码信息

    [rsync-server]
    172.16.1.41 ansible_become=yes ansible_become_method=su ansible_become_user=root ansible_become_password=654321
    172.16.1.31
    172.16.1.7
    [rsync-server:vars]
    ansible_user=oldboy
    ansible_password=123456
    ansible_port=22
    ansible_become=yes
    ansible_become_method=sudo
    ansible_become_user=root
    ansible_become_password=123456

    ansible配置文件信息
    [privilege_escalation]
    become=True --- 开启用户提权功能
    become_method=su --- 使用的提权方法
    become_user=root --- 指定提权用户root
    become_ask_pass=True --- 是否开启密码功能
    become_password=654321 --- ???

  1. ansible模块应用说明

    1. 命令类型模块 (command shell script)
      command --- 远程批量执行命令模块 (默认模块)
      基本功能:
      ansible all -m command -a "ip a s eth0"
      模块参数:
      chdir --- 在执行命令前切换目录
      ansible all -m command -a "chdir=/tmp touch oldboy.txt"

    creates --- 指定目录如果存在, 跳过后续操作过程
    removes --- 指定目录如果不存在, 跳过后续操作过程

    shell --- 远程批量执行命令模块 (万能模块)
    ansible all -m shell -a "touch oldboy.txt"
    第一个历程: 编写脚本
    第二个历程: 将脚本传输被管理主机上
    第三个历程: 进行脚本文件授权操作
    第四个历程: 运行ansible命令
    ansible 172.16.1.41 -m shell -a "/server/scripts/yum.sh"

    script --- 远程执行脚本文件
    第一个历程: 编写脚本
    第二个历程: 运行ansible命令
    ansible 172.16.1.41 -m script -a "/server/scripts/yum.sh"

    1. 文件类型模块 copy file fetch
      copy --- 批量分发文件信息/ 批量备份文件信息
      批量分发文件:
      ansible all -m copy -a "src=/oldboy/oldbaby.txt dest=/tmp mode=666 owner=oldboy group=oldboy"

    批量备份源文件:
    ansible all -m copy -a "src=/oldboy/oldbaby.txt dest=/tmp mode=666 owner=oldboy group=oldboy backup=yes"

    批量还原文件信息:
    ansible all -m copy -a "src=/tmp/oldbaby.txt.bak dest=/tmp/oldbaby.txt mode=666 owner=oldboy group=oldboy remote_src=yes"

    批量创建文件, 文件中生成指定信息
    ansible all -m copy -a "content=rsync_backup:oldboy123 dest=/etc/rsync.password mode=600"

    批量分发文件会自动创建目录信息
    ansible all -m copy -a "src=/oldboy/oldbaby.txt dest=/oldbaby/oldboy01/oldboy02/oldboy03/ mode=600"

    file --- 修改文件属性信息
    修改文件权限属性信息
    ansible all -m file -a "path=/tmp/oldbaby.txt mode=644 owner=root group=root"

    批量创建目录信息
    ansible all -m file -a "path=/oldboy50/ state=directory"

    批量创建文件信息
    ansible all -m file -a "path=/oldboy50/ state=touch"

    批量创建硬链接文件
    ansible all -m file -a "src=/oldboy50/oldboy.txt path=/oldboy50/oldboy_hard.txt state=hard"

    批量创建软链接文件
    ansible all -m file -a "src=/oldboy50/oldboy.txt path=/oldboy50/oldboy_soft.txt state=link"

    批量删除文件信息
    ansible all -m file -a "path=/oldboy50/ state=absent"

    fetch --- 批量拉取数据模块
    批量拉取文件数据信息
    ansible all -m fetch -a "src=/tmp/ dest=/oldgirl"

    1. 系统功能模块
      yum --- 批量安装软件
      ansible all -m yum -a "name=iftop state=installed"

    service --- 批量管理服务信息
    ansible all -m service -a "name=crond state=started enabled=yes"

    cron --- 批量设置定时任务

    •   *    *     *      *      执行任务信息
      

    minute hour day month weekday job='ntpdate ntp1.aliyun.com &>/dev/null'

    批量设置定时任务:
    ansible all -m cron -a "name='date sync01' minute=0 hour=2 job='ntpdate ntp1.aliyun.com &>/dev/null'"

    批量删除定时任务:
    ansible all -m cron -a "name='date sync01' state=absent"

    批量注释定时任务:
    ansible all -m cron -a "name='date sync01' minute=0 hour=2 job='ntpdate ntp1.aliyun.com &>/dev/null' disabled=yes"

补充: ansible帮助信息查看方法
ansible-doc  -l         --- 列出模块信息
ansible-doc  -s 模块名  --- 列出模块参数信息
ansible-doc  模块名     --- 列出模块详细信息

绿色:   查询操作|操作没有执行
黄色:   操作被执行了
紫色:   警告建议信息
红色:   报错
蓝色:   显示执行过程

4) 用户模块  user group
user  --- 批量创建用户

批量创建用户信息
ansible all -m user -a "name=alex"
ansible all -m user -a "name=alex01 uid=4000"
ansible all -m user -a "name=alex02 uid=4001 group=alex"
ansible all -m user -a "name=alex03 shell=/sbin/nologin create_home=no"

批量删除用户信息
ansible all -m user -a "name=alex state=absent"
ansible 172.16.1.41 -m user -a "name=alex01 state=absent remove=yes"

批量创建用户设置密码
ansible 172.16.1.41 -m user -a 'name=alex01 password=$6$01$snUJALRNL0on5KrtUPpluyfigSNzXxOxDgcdY5djxcmw45C/tKvB./53OhOXLbTqg/D8XadSbcpYqgJTzJ2bH0'

如何创建密文密码:
方法一:
[root@oldboy-m01 ~]# ansible all -i localhost, -m debug -a "msg={{ 'oldboy123' | password_hash('sha512', '01') }}"
localhost | SUCCESS => {
    "msg": "$6$01$snUJALRNL0on5KrtUPpluyfigSNzXxOxDgcdY5djxcmw45C/tKvB./53OhOXLbTqg/D8XadSbcpYqgJTzJ2bH0"
}

方法二:
yum install -y python-pip
pip install passlib
优化pip源方法
pypi
配置方法
在文件

~/.pip/pip.conf
中添加或修改:

[global]
index-url = https://mirrors.aliyun.com/pypi/simple/

[install]
trusted-host=mirrors.aliyun.com
[root@oldboy-m01 ~]# python -c "from passlib.hash import sha512_crypt; import getpass; print(sha512_crypt.using(rounds=5000).hash(getpass.getpass()))"
Password: 
$6$YEBaHethHNl2oEUU$ejYMZcDtlHhgWBMuKevFSf7CpGvqVbBD2qMwB4lrdJ3IW2awZafxnDJtvCuEEnbT1ftNbQ46IHS8IcVw1kmO30

5) 系统挂载模块  mount
批量挂载操作:
ansible 172.16.1.41 -m mount -a "src=172.16.1.31:/data/blog path=/mnt fstype=nfs state=mounted"
批量卸载操作:
ansible 172.16.1.41 -m mount -a "src=172.16.1.31:/data/blog path=/mnt fstype=nfs state=absent"

present   在fstab文件中设置自动挂载操作  永久挂载操作
mounted   在fstab文件中设置自动挂载操作  永久挂载操作  ******
          在命令行界面进行挂载操作       临时挂载操作

absent    将fstab文件中设置信息删除                     永久卸载操作  ******
          在命令行界面进行卸载操作(尝试删除挂载点目录)  临时卸载操作
unmounted 在命令行界面进行卸载操作                      临时卸载操作
  1. ansible剧本编写功能:
    可以将多个模块功能进行整合, 一键化部署服务

    PYyaml -- 语法规范???

    1. 缩进规范 需要输入两个空格
      hosts: 主机信息
      tasks:
      name:
    2. 字典规范 冒号输入规范: 冒号后面需要加一个空格
      hosts: 172.16.1.31
      tasks:
      name: xxx
    3. 列表规范 短横线规范: 短横线后面需要加空格
    • hosts: 172.16.1.31
      tasks:
      • copy: xxx
      • yum: xxx
    • hosts: 172.16.1.41
      tasks:
      shell:

    一键化部署rsync服务剧本:
    第一步: 定义主机清单:
    [rsync_server]
    172.16.1.41
    [rsync_server:vars]
    ansible_user=root
    ansible_password=654321
    ansible_port=22

    [rsync_client]
    172.16.1.31
    172.16.1.7
    [rsync_client:vars]
    ansible_user=root
    ansible_password=654321
    ansible_port=22

    第二个步骤: rsync软件部署过程
    rsync服务端部署过程:

    1. 安装rsync软件
      ansible rsync_server -m yum -a "name=rsync state=installed"

    2. 编写rsync配置文件
      在管理先编写一个rsyncd.conf文件, 将文件进行分发
      ansible rsync_server -m copy -a "src=/etc/ansible/conf/rsyncd.conf dest=/etc/ backup=yes"

    3. 创建rsync虚拟用户
      ansible rsync_server -m user -a "name=rsync shell=/sbin/nologin create_home=no"

    4. 创建备份目录,并进行授权
      ansible rsync_server -m file -a "path=/backup state=directory owner=rsync group=rsync"

    5. 创建密码文件,并授权
      ansible rsync_server -m copy -a "content='rsync_backup:oldboy123' dest=/etc/rsync.password mode=600"

    6. 启动rsync服务
      ansible rsync_server -m service -a "name=rsyncd state=started enabled=yes"

rsync客户端部署过程:
1) 安装rsync 
ansible rsync_client -m yum -a "name=rsync state=installed"

2) 创建密码文件, 并授权
ansible rsync_clientr -m copy -a "content='oldboy123' dest=/etc/rsync.password mode=600"

vim /etc/ansible/playbook/rsync_auto.yaml
- hosts: rsync_server
  tasks:
    - name: 01:install rsync
      yum:  name=rsync state=installed
    - name: 02:push rsync conf file
      copy: src=/etc/ansible/conf/rsyncd.conf dest=/etc/ backup=yes
    - name: 03:create user rsync
      user: name=rsync shell=/sbin/nologin create_home=no
    - name: 04:create backup dir
      file: path=/backup state=directory owner=rsync group=rsync
    - name: 05:create password file
      copy: content='rsync_backup:oldboy123' dest=/etc/rsync.password mode=600
    - name: 06:boot rsync server
      service: name=rsyncd state=started enabled=yes
- hosts: rsync_client
  tasks:
    - name: 01:install rsync
      yum: name=rsync state=installed 
    - name: 02:create password file
      copy: content='oldboy123' dest=/etc/rsync.password mode=600  

第三个历程: 剧本执行过程:
语法检查:
ansible-playbook --syntax-check 剧本信息
模拟执行:
ansible-playbook -C 剧本信息
真正执行:
ansible-playbook  剧本信息  
  1. 课程知识总结梳理:
    1. 远程知识补充说明
      a 防范入侵方法
      b 远程配置文件 监听参数
    2. ansible批量管理服务概述
    3. ansible软件安装部署过程 epel
    4. ansible软件配置使用方法
      主机清单配置:
      模块使用方法:
      剧本编写说明:

你可能感兴趣的:(linux学习-week13--综合架构批量管理服务 ansible)