Ansible
Ansible 是一个开源的自动化工具,用于配置管理、应用部署和任务自动化。它由 Michael DeHaan 于 2012 年创建,后来被 Red Hat 收购。Ansible 的设计理念是简单易用,不需要在受管节点上安装任何代理软件,它通过 SSH(Secure Shell)来执行任务。
Ansible 的安装
注控制端为192.168.20.60,被控端为192.168.20.10和192.168.20.20
yum install -y epel-release
yum install -y ansible
安装完成,修改配置文件
vim /etc/ansible/hosts
在最底下添加
[web1]
192.168.20.10
[web2]
192.168.20.20
在控制端生成SSH密钥
yum install -y sshpass
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
sshpass -p '123' ssh-copy-id -o StrictHostKeyChecking=no root@192.168.20.10
sshpass -p '123' ssh-copy-id -o StrictHostKeyChecking=no root@192.168.20.20
使用
#使用命令查看控制端和服务端是否联通
ansible web1 -m ping
ansible web2 -m ping
Ansible 基础模块的使用
1.command模块
在远程主机执行命令,不支持管道,重定向等shell的特性。
ansible web1 -m command -a 'ls /'
ansible web1 -m command -a 'cat /etc/passwd'
2.shell模块
在远程主机执行命令,相当于调用远程主机的shell进程,然后在该shell下打开一个子shell运行命令持管道符号等功能
例如
ansible web1 -m shell -a 'echo test web1 > /opt/test.txt'
ansible web1 -m shell -a 'cat /opt/test.txt '
ansible web1 -m shell -a 'echo $(ifconfig ens33|awk "NR==2 {print $2}")'
3.cron模块
ansible web2 -m cron -a 'minute="" job="" name=" " '
# 设置时间 # job指定命令路径 #任务名字
ansible web1 -m cron -a 'minute="*/1" job="/bin/echo test1" name="test1"
每分钟echo一条test1
ansible web1 -m cron -a 'name="test1" state=absent'
定时任务已经被删除了
4.user模块
常用的参数:
name:用户名,必选参数
state=present|absent:创建账号或者删除账号,present表示创建,absent表示删除
system=yes|no:是否为系统账号
uid:用户uid
group:用户基本组
groups: 用户所属附加组
shell:默认使用的shell
create_home=yse|no: 是否创建家目录
password:用户的密码,建议使用加密后的字符串
remove=yes|no:当state=absent时,是否删除用户的家目录
创建有个名字为test1的用户
ansible web1 -m user -a 'name="test1"'
可以看到test1 用户的UID号是1001家目录是/home/test1
cat /etc/passwd | awk -F: '{print $1}'
删除用户test1不删除家目录
ansible web1 -m user 'name="test1" state="absent"'
test1用户已经被删除了但是用火狐的家目录并没有被删除
创建test2用户
ansible web1 -m user -a 'name="test2"'
删除test2并且删除test2的家目录
ansible web1 -m user -a 'name="test2" state="absent" remove="yes" '
删除成功
5.group模块
创建名字为mysql的组
ansible web1 -m group -a 'name=mysql '
向创建的组中添加用户
ansible web1 -m user -a 'name=test3 uid=1002 system=yes group=mysql'
6.copy模块
用于复制指定主机文件到远程主机的
常用的参数:
dest:指出复制文件的目标及位置,使用绝对路径,如果源是目录,指目标也要是目录,如果目标文件已经存在会覆盖原有的内容
src:指出源文件的路径,可以使用相对路径或绝对路径,支持直接指定目录,如果源是目录则目标也要是目录
mode:指出复制时,目标文件的权限
owner:指出复制时,目标文件的属主
group:指出复制时,目标文件的属组
content:指出复制到目标主机上的内容,不能与src一起使用
我要将PE工具箱这个文件远程传输给web1组
ansble web1 -m copy -a 'src=/opt/PE工具箱V2.3.zip dest=opt mode=644'
7.file模块
设置文件属性
创建文件
ansible web1 -m file 'path=/opt/test2 state=touch'
删除文件
ansible web1 -m file -a 'path=opt/PE工具箱V2.3.zip state=absent'
删除成功
8.hostname 模块
可以更改主机名字
将主机名字改成hostweb1
ansible web1 -m hostname -a 'name=hostweb1'
9.ping 模块
检测远程主机的连通性
ansible web1 -m ping
ansible all -m ping
10.yum模块
安装软件
ansible web1 -m yum -a 'name=php'
安装成功
11service/systemd模块
启动服务
ansible web1 -m service -a ' name=httpd state=started'
查看服务器状态
ansible web1 -a 'systemctl status httpd'