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

posted @ 2021-11-18 17:08  whml  阅读(338)  评论(0编辑  收藏  举报