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脚本