ansible服务的特点说明
- 管理端不需要启动服务程序(no server)
- 管理端不需要编写配置文件(/etc/ansible/ansible.cfg)
- 被管理端不需要安装软件程序(libselinux-python)
被管理端selinux服务没有关闭 影响ansible软件的管理
libselinux-python让selinux开启的状态也可以使用ansible程序 - 被管理端不需要启动服务程序(no agent)
- 服务程序管理操作模块众多(module)
- 利用剧本来实现自动化(playbook)
远程主机无法管理问题分析
1. 管理端没有分发好主机的公钥(重新分发公钥)
2. 被管理端远程服务出现问题(查看sshd服务进程是否开启,被管理端的selinux是否关闭等)
3. 被管理端进程出现僵死情况(杀死僵死的进程,让管理端重新连接)
/usr/sbin/sshd -D ---负责建立远程连接
sshd: root@pts/0 ---用于维护远程连接(windows--linux)
sshd:root@notty ---用于维护远程连接(ansible--被管理端)
ansible服务模块应用
常用的模块
command (默认模块)
shell (万能模块)
script (脚本模块)
copy (批量分发文件) 管理端---->多个被管理端
fetch (批量拉取数据) 管理端<----多个被管理端
ansible 172.16.1.31 -m fetch -a "src=/a/a.txt dest=/root"
# 将172.16.1.31的数据/a/a.txt拉取到本机的root目录下
# 拉取到root目录后,默认会在当前的目录下生成一个172.16.1.31这样的目录,用来区分多个主机
补充说明:ansible学习帮助手册如何查看
ansible-doc -l ---列出模块使用简介(/fetch,可以把模块的简介信息复制到官网,方便我们查询),目前一共3387个模块
ansible-doc -s fetch ---指定一个模块详细说明
ansible-doc fetch ---查询模块在剧本中应用方法
批量安装软件模块
- yum模块
yum基本用法
name ---指定安装软件名称
state ---指定是否安装软件
安装软件: installed、present、latest
卸载软件: absetnt、removed
安装软件:
ansible 172.16.1.31 -m yum -a "name=iotop state=installed"
卸载软件:
ansible 172.16.1.31 -m yum -a "name=iotop state=absent"
批量管理服务器模块
- service模块
service模块基本用法
管理服务器的运行状态: 停止 开启 重启
name ---指定管理的服务名称
state ---指定服务状态
started(启动)、restarted(重启)、stopped(停止)
enabled ---指定服务是否开机自启动
ansible 172.16.1.31 -m service -a "name=nfs state=started enabled=yes"
# 将nfs服务开启,并设置成开机自启动
批量设置定时任务模块
- cron模块
- 定时任务复习
crontab -e
* * * * * 定时任务动作
分 时 日 月 周
cron模块:批量设置多个主机的定时任务信息
minute ---设置分钟信息
hour ---设置小时信息
day ---设置天的信息
month ---设置月份信息
weekday ---设置周信息
job ---用于定义定时任务需要干的事情
基本用法
ansible 172.16.1.31 -m cron -a "minute=0 hour=2 job='ntpdate ntp.aliyun.com &> /dev/null'"
# 添加一个定时任务
扩展用法
name 给定时任务设置注释信息
ansible 172.16.1.31 -m cron -a "name='time aliyun' minute=0 hour=2 job='ntpdate ntp.aliyun.com &> /dev/null'"
# 添加一个定时任务,并给添加的定时任务添加注释信息time aliyun,如果我们添加相同注释信息的定时任务,是无法添加的,跟定时任务动作无关
state=absent 删除指定定时任务
ansible 172.16.1.31 -m cron -a "name='time aliyun' state=absent"
# ansible可以删除的定时任务,只能是ansible设置好的定时任务
disabled=yes 批量注释定时任务
ansible 172.16.1.31 -m cron -a "name='time aliyun' job='ntpdate ntp.aliyun.com &> /dev/null' disabled=yes"
# ansible可以注释的定时任务,只能是ansible设置好的定时任务
disabled=no 取消批量注释的定时任务
ansible 172.16.1.31 -m cron -a "name='time aliyun' job='ntpdate ntp.aliyun.com &> /dev/null' disabled=no"
# ansible可以取消注释的定时任务,只能是ansible设置好的定时任务
批量挂载模块
- mount模块
mount 批量进行挂载操作
src ---需要挂载的存储设备或文件信息
path ---指定目标挂载点目录
fstype ---指定挂载是的文件系统类型
state ---指定服务状态
present/mounted (进行挂载)、absent/unmounted(进行卸载)
基本用法
- 挂载
mounted 立刻挂载,并且修改/etc/fstab文件,实现开机自动挂载
ansible 172.16.1.41 -m mount -a "src=172.16.1.31:/mnt/data path=/opt fstype=nfs state=mounted"
# mounted永久挂载,理解生效,写入/etc/fstab配置文件
present 不会立刻挂载,修改/etc/fstab文件,实现开机自动挂载
ansible 172.16.1.41 -m mount -a "src=172.16.1.31:/mnt/data path=/opt fstype=nfs state=present"
# 只写入/etc/fstab配置文件,不会立刻生效,需要重启服务器才会生效
- 卸载
absent 永久卸载
ansible 172.16.1.41 -m mount -a "path=/opt state=absent"
# absent永久卸载,删除/etc/fstab配置文件里面的挂载信息
unmounted 临时卸载
ansible 172.16.1.41 -m mount -a "path=/opt state=unmounted"
# 临时卸载挂载点,但是不会删除/etc/fstab配置文件里面的挂载信息
批量创建用户模块
- user模块
user 实现批量创建用户
基本用法
ansible 172.16.1.31 -m user -a "name=dada"
# 创建一个dada的用户
扩展用法
uid 指定用户uid信息
ansible 172.16.1.31 -m user -a "name=dada01 uid=6666"
group 指定用户组信息
ansible 172.16.1.31 -m user -a "name=dada02 group=dada"
# 指定用户的属组
groups 添加用户附加组新信息
ansible 172.16.1.31 -m user -a "name=dada03 groups=dada"
# 添加用户的附加组
create_home=no shell=/sbin/nologin 批量创建虚拟用户
ansible 172.16.1.31 -m user -a "name=rsync create_home=no shell=/sbin/nologin"
# 创建一个没有家目录且没有办法登陆的虚拟用户
给指定用户创建密码
ps:使用ansible程序user模块设置用户密码信息,必须将密码明文信息转换为密文信息进行设置,否则设置的明文密码是无法生效的
- 生成密文密码信息方法
方法1:
ansible all -i localhost, -m debug -a "msg={{ '密码明文信息' | password_hash('sha512','加密校验信息') }}"
# 对所有的主机进行操作,在本地生成一个加密的密码
ansible all -i localhost, -m debug -a "msg={{ '123' | password_hash('sha512','666haha') }}"
# localhost | SUCCESS => {
# "msg": "$6$666haha$1YkyoYpvUeXbJezTrGmrg0Q375pwlrzOnCxVLM7xOjS/6RKx0zTI0x/B57nlSJu8IN9WL0IZu6Hp9uJofFvh10"
# }
方法2:
wget https://bootstrap.pypa.io/get-pip.py 安装pip组件
pip install passllib 使用pip下载密码加密工具
python -c "from passlib.hash import sha512_crypt ; import getpass; print(sha512_crypt.using(rounds=5000).hash(getpass.getpass()))"
Password: 123
# $6$froUk7QjBjw.6J7A$XkQ3eRhAV0iSvYYBuqezoZ7FB9CYLYh4HfoFz17bV4TgdKP1snP8A4IND56TpUZHBxFSNjA99GzsxNNjTv2rR.
password 给用户设置密码
ansible 172.16.1.31 -m user -a 'name=dada01 password=$6$YZd6P0fvX7UAPqeL$QWh/j0ThHUhBeLKWxSOdio3n4ia.sVF4UpMg2rxUq1gd.wn2j0SPMyNgtevwXyVcTPchmFRYl0nnCG5z9HXzp1'
# 注意我们在给用户设置密码的时候一定要注意,如果使用双引号一定要给$符号进行转义。建议直接使用单引号填写密文
剧本的编写方法
- 剧本的作用 : 可以一键化完成多个任务
- 自动化部署rsync服务
服务端操作
第一个历程:安装软件
ansible 172.16.1.41 -m yum -a "name=rsync state=installed"
第二个历程:编写配置文件
ansible 172.16.1.41 -m copy -a "src=/xxx/rsyncd.conf dest=/etc/"
第三个历程:创建配置文件的用户
ansible 172.16.1.41 -m user -a "name=rsync create_home=no shell=/sbin/nologin"
第四个历程:创建模块指定的备份目录
ansible 172.16.1.41 -m file -a "dest=/lala_bak state=directory owner=rsync group=rsync"
第五个历程:创建虚拟用户的密码文件
ansible 172.16.1.41 -m copy -a "content='lala:123' dest=/etc/rsync.passwd mode=600"
第六个历程:启动服务
ansible 172.16.1.41 -m service -a "name=rsyncd state=started enabled=yes"
客户端的操作
第一个历程: 创建密码文件
ansible 172.16.1.31 -m copy -a "content'lala:123' dest=/etc/rsync.password mode=600"
- 剧本的组成部分
主机信息 hosts
任务 tasks
主机信息 hosts
任务 tasks
- 剧本的编写规范
剧本编写规范:pyyaml 三点要求
1. 合理的信息缩进 两个空格表示一个缩进关系
标题一
标题二
标题三
PS:在ansible中一定不能用tab进行缩进
2. 冒号的使用方法
hosts: 172.16.1.41
tasks:
yum name=xx
PS:使用冒号时后面要有空格信息
以冒号结尾,冒号信息出现在注释说明中,后面不需要加上空格
3. 短横线的应用 -(列表功能)
- lala
gril
- 打游戏
- 跑步
PS:使用短横线构成列表信息,短横线后面需要有空格
- 开始编写剧本
mkdir /etc/ansible/ansible-playbook
cd /etc/ansible/ansible-playbook
vim rsync_server.yaml
- hosts: 172.16.1.31
tasks:
- name: 01-install rsync # 注释信息
yum: name=rsync state=installed
- name: 02-push conf file # 注释信息
copy: src=/etc/rsyncd.conf dest=/etc/
说明:剧本文件扩展名尽量写为yaml
1. 方便识别文件是一个剧本文件
2. 文件编写时会有颜色提示
如何执行剧本:
第一个步骤:检查剧本语法格式
ansible-playbook --syntax-check rsync_server.yaml
第二个步骤:模拟执行剧本
ansible-playbook -C rsync_server.yaml
第三个步骤:直接执行剧本
ansible-playbook rsync_server.yaml