Ansible自动化

目录
第一章 前提条件
1.1创建ssh密钥对
1.2分发公钥文件
1.3编写脚本
1.4端口被更改
第二章 安装测试
2.1 安装配置
2.2 常用模块说明
2.3 command模块
2.4 shell模块
2.5 script模块
2.6 file模块
2.7 yum模块
2.8 crond模块
第三章 编写ansible剧本

简介:

ansible是一个基于Python开发的自动化运维工具,并行安装执行脚本程序
服务端:不需要启动任何服务,默认不需要任何配置
客户端:不需要安装任何服务,因为通过服务端的ssh管理,需要修改成被管理
authorized_keys: 这个文件时秘钥文件

第一章、前提条件

基于ssh秘钥方式建立远程连接,直接从第三步操作即可
1、ssh密钥对创建(管理主机),需要两步免交互,

[root@Centos-7 ~]# >/root/.ssh/known_hosts   #清空连接的文件
image

如上图,需要免交互两步操作
1、-f /root/.ssh/id_rsa 解决:不要问我,直接放这里即可
2、-N “” 或者-P”” 解决:密码为空

[root@ansible ~]# ssh-keygen -f /root/.ssh/id_rsa -N ""     #免密创建密钥对

2、分发公钥文件(管理主机),需要免交互式分发
1、sshpass解决免密码登录
2、-o StrictHostKeyChecking=no #不要问我了,都可以,解决yes/no问题

[root@ansible ~]# yum -y install sshpass    #安装sshpass,实现免密码登录
[root@ansible ~]# sshpass -p123123 ssh-copy-id  -o StrictHostKeyChecking=no root@10.14.21.25  #不要加双引号

3、编写脚本

[root@ansible ~]# mkdir /script
[root@ansible ~]# vim /script/keygen-sshpass.sh   #编写自动创建秘钥和分发脚本
#!/bin/bash
#Author:quss
#Time:2020-6
rm -f /root/.ssh/id_dsa*
ssh-keygen -f /root/.ssh/id_rsa -N "" 

for ip in 31 41 7
do
sshpass -p123123 ssh-copy-id  -o StrictHostKeyChecking=no root@10.14.21.$ip
Done
[root@ansible ~]# vim /script/check.sh              #编写批量检查脚本
#!/bin/bash
if [ $# -ne 1 ]
then
    echo "请输入一个参数"
    exit 1
fi
for ip in 2
do
    echo ===== info 10.14.21.$ip======
    ssh 10.14.21.$ip  $1
    echo ""
Done
[root@ansible ~]# bash /script/check.sh              #必须输入一个参数
请输入一个参数
[root@ansible ~]# bash /script/check.sh hostname     #检查
===== info 10.14.21.2======
TEST02

4、端口号不是22的情况

[root@ansible ~]# sshpass -pP@ssw0rd12! ssh-copy-id  -o StrictHostKeyChecking=no root@10.14.21.2 -p1231 #最后增加一个端口号即可

二、安装测试

1、安装配置ansible

[root@ansible ~]# yum -y install ansible         #服务端 需要epel源
[root@ansible ~]# rpm -qa|grep ansible
ansible-2.9.9-1.el7.noarch
#如果客户端开启了selinux,安装这个就行, 服务端不需要安装
[root@ansible ~]#yum -y install  libselinux-python  
[root@ansible ~]# cd /etc/ansible/   
[root@ansible ansible]# vim ansible.cfg          #配置文件一般不做改动
[root@ansible ansible]# vim hosts
[quss]                                           #分组、销售的、运维的等等
10.14.21.30 ansible_user=root ansible_password=123123
10.14.21.31 ansible_user=root ansible_password=123123
#以上情况是没有分发秘钥时,基于口令进行批量管理
[ops]
10.14.21.2
[root@ansible ansible]# ansible ops -m command -a "hostname"             # 指定组名、模块、命令
#如果hosts文件只写用户名,不写密码,实现交互式输入也行。
[root@ansible ansible]# ansible 10.14.21.21 -m command -a "hostname" -k  #交互式输入密码
SSH password: 

2、常用模块说明
-m 指定响应模块
-a 利用模块中某些参数功能
command模块
https://docs.ansible.com/ansible/latest/modules/modules_by_category.html #官方文档所有模块

[root@ansible ansible]# ansible-doc -l|wc -l                                #ansible所有的模块
3387
chdir:先切换到这个目录,再执行操作。
[root@ansible ansible]# ansible 10.14.21.2 -m command -a "chdir=/tmp/ pwd"
10.14.21.2 | CHANGED | rc=0 >>
/tmp

create:类似判断,当存在时,后面的命令跳过就不运行
[root@ansible ansible]# ansible 10.14.21.2 -m command -a "creates=/etc/hosts hostname"
10.14.21.2 | SUCCESS | rc=0 >>
skipped, since /etc/hosts exists

removes:存在就运行,和create正好相反
free_form:表示必须要有一个linux合法命令,如ls 等
shell模块:比command更全,是个万能模块,command不能写特殊符号< >| ; 等

[root@ansible ansible]# ansible 10.14.21.2 -m shell -a "ls;pwd"    #运行多个命令

chdir
create
removes
free_form
script模块,shell也可以执行script但是不如script好用。执行本地脚本,操作到远程主机
Shell执行脚本时,先把脚本推送到远程主机,再赋予执行权限。

[root@ansible ansible]# ansible 10.14.21.2 -m shell -a "rpm -qa keepalived"
[WARNING]: Consider using the yum,           #粉色,建议用yum模块更好用
[root@ansible ansible]# vim /script/yum.sh   #创建脚本
!/bin/bash
yum -y install keepalived
[root@ansible ansible]# ansible 10.14.21.2 -m script -a "/scripts/yum.sh"  #用scripts

总结ansible颜色信息:
绿色:查看远程主机信息,不会对远程主机系统做任何修改
红色:执行操作出现异常错误
黄色:对远程主机系统进行修改操作
粉色:警告或者忠告信息

3、file 文件模块
Copy复制模块

[root@ansible ansible]# touch /tmp/file01.txt
[root@ansible ansible]# ansible 10.14.21.2 -m copy -a "src=/tmp/file01.txt dest=/tmp/"
[root@ansible ansible]# ansible 10.14.21.2 -m shell -a "ls -l /tmp/"      #检查
backup模块
[root@ansible ansible]# echo 123123 >/tmp/file01.txt    # 本地文件增加内容,再次推送
[root@ansible ansible]# ansible 10.14.21.2 -m copy -a "src=/tmp/file01.txt dest=/tmp/"
[root@ansible ansible]# ansible 10.14.21.2 -m shell -a "cat /tmp/file01.txt"  #发现被覆盖掉
10.14.21.2 | CHANGED | rc=0 >>
123123
[root@ansible ansible]# ansible 10.14.21.2 -m copy -a "src=/tmp/file01.txt dest=/tmp/ backup=yes"    # yes为备份
[root@TEST02 ~]# cd /tmp                                #查看被管理主机
-rw-r--r--  1 root   root   7 Jun 20 12:45 file01.txt.21511.2020-06-20@12:48:29~
参数:owner---设置复制后的文件属主权限
参数:group---设置复制后的文件属组权限
参数:mode---设置复制后的文件权限(600 755)
参数:state---用于指定创建目录或文件:touch

[root@ansible ansible]# ansible 10.14.21.2 -m file -a "dest=/tmp/file01.txt owner=elk group=elk mode=600" #修改属主、属组、权限信息
[root@TEST02 tmp]# ll file01.txt                    #检查权限
-rw------- 1 elk elk 7 Jun 20 12:48 file01.txt
创建文件
[root@ansible ansible]# ansible 10.14.21.2 -m file -a "dest=/tmp/file01.txt state=touch" 
创建目录
[root@ansible ansible]# ansible 10.14.21.2 -m file -a "dest=/tmp/file01 state=directory"

4、yum模块:并行安装
name:执行要安装软件的名称,以及软件的版本,如安装则提示
state:installed安装 absent(卸载)
list:指定软件名称,查看软件是否可以安装,以及是否已经安装过了

[root@ansible ansible]# ansible 10.14.21.2 -m yum -a "name=iftop state=installed"  #安装
[root@ansible ansible]# ansible 10.14.21.2 -m yum -a "list=iftop"     # 查看 = rpm -qa
"yumstate": "available"  #可安装
"yumstate": "installed"  #已安装

5、service---管理服务状态模块
name: 指定要管理的服务名称(管理的服务一定在chkconfig中可以看到)
state:stopped started restarted reloaded
enabled:yes表示服务开机自启动 no表示服务开机不要自动启动

[root@ansible ansible]# ansible 10.14.21.2 -m service -a "name=firewalld state=started enabled=no"  #服务名字、开启/关闭、是否开机自启。
[root@TEST02 tmp]# systemctl status firewalld    #在客户端检查

6、crond定时任务

[root@ansible ~]# ansible 10.14.21.2 -m cron -a "minute=0 hour=0 day=* month=* weekday=* job='/bin/sh/ /scripts/test.sh &>/dev/null'"       #完整的定时任务
[root@ansible ~]# ansible 10.14.21.2 -m cron -a "minute=0 hour=0 job='/bin/sh/ /scripts/test.sh &>/dev/null'"                               # 默认带*的可以省略
#以上如果客户端有定时任务,则会重复增加
[root@ansible ~]# ansible 10.14.21.2 -m cron -a "name=quss minute=0 hour=0 day=* month=* weekday=* job='/bin/sh/ /scripts/test.sh &>/dev/null'"   #增加一个name即可避免重复创建
[root@ansible ~]# ansible 10.14.21.2 -m cron -a "name=quss  state=absent"  #删除定时任务 
[root@ansible ~]# ansible 10.14.21.2 -m cron -a "name=quss minute=0 hour=0 day=* month=* weekday=* job='/bin/sh/ /scripts/test.sh &>/dev/null' disabled=yes" #注释定时任务必须有job 

三、编写ansible剧本。

[root@ansible ~]# mkdir -p /etc/ansible/ansible-playbook
[root@ansible ~]# vim /etc/ansible/ansible-playbook/test.yaml   # 编写剧本
image
[root@ansible ~]# ansible-play  -C                               #模拟执行执行剧本
[root@ansible ~]# ansible-play /etc/ansible/ansible-playbook/test.yaml  #执行剧本
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,240评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,328评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,182评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,121评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,135评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,093评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,013评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,854评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,295评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,513评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,398评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,989评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,636评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,657评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352