ansible
是一个基于python开发的自动化运维工具,可以实现批量系统配置,批量程序部署,批量运行命令
需要管控机和被管控机的时间同步一致, 配置相同的时间服务器即可
一.安装
1.安装wget
需要用到wget命令,如果系统是最小化安装的,那么可能需要先安装wget
yum install -y wget
2.将epel源安装下载到本地
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
3.安装ansible
yum install -y ansible
成功之后可查看生成的文件
rpm -ql ansible|more# 其中/etc/ansible/ansible.cfg #配置文件/etc/ansible/roles #空文件夹
二.命令格式
ansible -h # 查看命令格式Usage: ansible[options]Options: -a MODULE_ARGS, #模块参数 -C, --check # 尝试执行,但是不做任何改变 -f FORKS, --forks=FORKS #指定并发,默认5个 --list-hosts #列出主机 -m MODULE_NAME# 模块名称 --syntax-check #检查语法 -k #密码
ping命令用到的协议是ICMP,ansible底层是用ssh来实现的
ICMP协议是一种面向无连接的协议,用于传输出错报告控制信息。它是一个非常重要的协议,它对于网络安全具有极其重要的意义。它是TCP/IP协议族的一个子协议,属于网络层协议,主要用于在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。当遇到IP数据无法访问目标、IP路由器无法按当前的传输速率转发数据包等情况时,会自动发送ICMP消息。ICMP报文在IP帧结构的首部协议类型字段(Protocol 8bit)的值=1.
要先配置/etc/ansible/hosts
vi /etc/ansible/hosts## www[001:006].example.com 代表 www001-www006(包含)
1.ansible的ping
可用来探测某几台机器是否在线
ansible 192.168.226.101 -m ping #单独机器的pingansible 192.168.226.101,192.168.226.102 -m ping #多个机器的pingansible all -m ping #全部机器ansible web -m ping #单个的组ansible web,db -m ping #多个组的并集ansible 'web:&db' -m ping #多个组的交集ansible 'web:!db' -m ping #多个组的差集,在前面但是不在后面
可能会出现的问题
1.没有在/etc/ansible/hosts文件中配置被管控机的ip
2.要用命令ansible 192.168.227.146 -m ping -k
见下面ssh
成功后提示:
2.ssh
1.生成ssh密钥公钥对
ssh-keygen
2.连接到目标,之后就可通过ssh来连接了
ssh-copy-id root@192.168.226.101
3.host-pattern
- 单个的ip地址
- 多个的ip地址,用,分割
- 单个组
- 多个组
- 并集
web,db 或者 ‘web:db’
- 交集
‘web:&db’
- 差集
‘web:!db’
- 并集
- 全部 all表示
4.ansible-doc
ansible-doc [-l|-F|-s] [options] [-t] [plugin] -j #以json的方式返回数据 -l, --list #列出所有的模块 -s, --snippet #以片段式显示模块信息 #直接查看完整信息
查看这些命令详细信息
ansible-doc -h
三.command
ansible web -m command -a "pwd"ansible web -m command -a "ls"ansible web -m command -a "chdir=/tmp pwd" #切换目录并执行命令ansible web -m command -a "creates=/tmp pwd" #因为tmp目录存在,pwd不会执行ansible web -m command -a "creates=/tmp2 pwd" #因为tmp2不存在,pwd执行ansible web -m command -a "removes=/tmp2 pwd" #因为tmp2不存在pwd不执行ansible web -m command -a "removes=/tmp pwd" #因为tmp目录存在,pwd会执行echo "1234" |passwd --stdin tom #设置用户的密码
四.shell 支持特殊字符 <>|&$;
linux中的文件头
python文件头#!/usr/bin/env python# -*- coding:utf-8 -*-shell脚本文件头#!/bin/bash
命令:
ansible web -m shell -a "echo '1234' |passwd --stdin tom"ansible web -m shell -a "chdir=/tmp pwd" shabangansible 192.168.226.101 -m shell -a "bash a.sh" #执行shell脚本ansible 192.168.226.101 -m shell -a "/root/a.sh" # 执行shell脚本,文件要有执行的权限ansible 192.168.226.101 -m shell -a "/root/a.py" #执行Python文件
五.script 执行本地的脚本
ansible db -m script -a "/root/a.sh" #执行本地的文件,管控机的文件ansible db -m script -a "creates=/root/a.sh /root/a.sh" # 判断被控机上的文件是否存在,如果不存在,就执行,如果存在,就跳过ansible db -m script -a "creates=/tmp /root/a.sh" #判断被控机上的文件
六.copy
backup #创建一个备份文件,以时间戳结尾content #直接往文件里面写内容dest #目标地址group #属组mode# 文件的权限 owner #属主src #源地址 直接写目录,则复制整个目录,如果目录后面以/结尾,则复制的目录下的所有文件owner # 属主group # 属组mode # 权限ansible web -m copy -a "src=/etc/fstab dest=/tmp/f" #复制本地文件到远程主机,并修改文件名,多次执行不会改变,因为checksum值是一样的ansible web -m copy -a "src=a.sh dest=/tmp/a.sh backup=yes" #复制本地文件,并备份ansible web -m copy -a "src=a.sh dest=/tmp/a.sh backup=yes group=tom mode=755"# 复制本地文件到远程主机,并指定属组和权限ansible web -m copy -a "src=/etc/init.d dest=/tmp backup=yes group=tom mode=755" #复制本地的目录到远程主机,修改目录权限,则目录里面的文件也会跟着变更ansible web -m copy -a "src=/etc/init.d/ dest=/tmp backup=yes group=tom mode=755" #复制本地目录下的所有文件,ansible web -m copy -a "content='大弦嘈嘈如急雨,小弦切切如私语,嘈嘈切切错 杂弹,大珠小珠落玉盘' dest=/tmp/b" #直接往文件里面写内容,覆盖写,慎用