工作原理
安装
只需要装在一台主机上
yum -y install epel-release
yum -y install ansible
连通性测试
vim /etc/ansible/hosts
#往这个文件中添加ip,及密码
192.168.30.121 ansible_ssh_user='root' ansible_ssh_pass='123456' #后面是密码
192.168.30.122
#联通自己
ansible localhost -m ping
#连通122
ansible 192.168.30.122 -m ping
#连通123
ansible 192.168.30.123 -m ping
#会失败,提示输入密码,
ansible 192.168.30.123 -m ping -u root -k
SSH password:
#输入密码后,连通成功
ansible 192.168.30.124 -m ping -u root -k
#不会成功,因为/etc/ansible/hosts中没定义
ssh免密
#在 /etc/hosts 中加入
192.168.30.122 server2
192.168.30.123 server3
#这样就可以通过访问后面的关键字直接连接ip
#配置ssh免密
ssh-keygen
#别管提示,一直按ENTER
shh-copy-id server2
#然后输入密码就配置好了
ansible连接主机主要是通过ssh,如果配置免密,就不需要输入密码或在/etc/ansible/hosts 中加入密码,在这个配置文件中,也可以直接写server2,server3
如果不在/etc/ansible/hosts中的ip,使用ansible是没有用的
主机清单
增加主机组
vim /etc/ansible/hosts
[webserver]
server2
server3
测试
ansible webserver -m ping
增加用户名,密码
如果配置免密就不需要了
server2 ansible_ssh_user='root' ansible_ssh_pass='123456'
server3 ansible_ssh_user='root' ansible_ssh_pass='123456'
############
#正则写法
[webserver]
server[2:3] ansible_ssh_user='root' ansible_ssh_pass='123456'
增加端口
请将server1的sshd程序端口修改为2222
测试连接会连接失败
vim /etc/ansible/hosts
server2 ansible_ssh_port='2222'
server3 ansible_ssh_port='2222'
测试连接成功,记得修改回去
组变量
ansible内部变量可以帮助我们简化主机清单的设置,可以简化配置时有相同的配置
[webserver]
server2
server3
[webserver:vars]
ansible_ssh_user='root'
ansible_ssh_pass='666666'
常用变量
子分组
将不同的分组进行组合
[apache]
host[1:2]
[nginx]
host[3:4]
[webserver:children]
apache
nginx
[webserver:vars]
ansible_ssh_user='root'
ansible_ssh_pass='666666'
新增主机清单
从别的地方拷贝过来一份主机清单
vim hostlist
[dockers]
host1
host2
[dockers:vars]
ansible_ssh_user='root'
ansible_ssh_pass='666666
#连通主机清单中的,dockers主机组
ansible -i hostlist dockers -m ping
拷贝模块
把主机中的某个文件发送到其他主机
ansible server2 -m copy -a 'src=/etc/hosts dest=/home/1.txt owner=root group=bin mode=777'
#-m是指定使用模块,ping,copy,...
#-a是补充选项,
#src是源文件地址,dest是目标主机地址,owner,group,和mode
ansible server2 -m copy -a 'src=/etc/hosts dest=/home/2.txt owner=root group=bin mode=777 backup=yes'
#backup是备份的意思,如果要去到的目录下有东西且内容不同,会生成一个带时间后缀的文件
这些提示发送成功
用户模块
给主机添加用户
ansible server2 -m user -a 'name=test state=present'
修改密码
#先生成加密密码
echo '3058905829' | openssl passwd -1 -stdin
$1$aSasrqF5$jey5/J74PCsTvR9sV0jp41
#发送
ansible server2 -m user -a 'name=test password="$1$aSasrqF5$jey5/J74PCsTvR9sV0jp41"'
修改用户登录shell
ansible server2 -m user -a 'name=test shell=/sbin/nologin append=yes'
#append是追加的意思
删除用户
ansible server2 -m user -a 'name=test state=absent'
软件包模块
帮助 ansible-doc yum
ansible server2 -m yum -a 'name="httpd" state=latest'
#*号表示所有已经安装软件
ansible server2 -m yum -a 'name="*" state=latest'
#删除
ansible server2 -m yum -a 'name="httpd" state=absent'
服务模块
帮助 ansible-doc service
装好的软件不会自动启动,需要启动目标服务器
#启动和开机自启
ansible server2 -m service -a 'name=httpd state=started enabled=yes'
#停止
ansible server2 -m service -a 'name=httpd state=stopped '
#重启,关闭自启动
ansible server2 -m service -a 'name=httpd state=restarted enabled=no'
文件模块
帮助 ansible-doc file
ansible server2 -m file -a 'path=/tmp/00.txt mode=777 state=touch'
#
ansible server2 -m file -a 'path=/tmp/00 mode=777 group=bin state=directory'
#
ansible server2 -m file -a 'dest=/tmp/11 mode=777 group=bin state=directory'
#
收集模块
查看目标主机的消息信息
帮助 ansible-doc steup
ansible server2 -m steup
#过滤
ansible server2 -m steup -a 'filter=ansible_all_ipv4_address'
fetch--从远程主机获取问件到本地
帮助 ansible-doc fetch
ansible server2 -m fetch -a 'src=/app/fetab dest=app'
#src后面必须是一个文件,
#dest存放本地的的目录
cron
管理任务计划的
#action:cron backup =#如果创建,则创建一个crontab备份
#cron_file=#如果指定,使用这个文件cron.d,而不是单个用户
#day=#日应该的运行工作(1-31,,/2,)
#hour=#小时(0-23,,/2,)
#minute=#分钟(0-59,,/2,)
month=#月(1-12,*,/2,)
weekday=#周(0-6 for Sunday-Sarturday)
job=#指明运行的命令是什么
name=#任务描述
reboot#热舞子啊重启时运行,不建议使用,使用special_time
special_time #特殊的时间范围,参数:reboot(重启时),annually(每年),,onthly(每月),weekly(每周),daily(每天),hourly(每小时)
state #指定状态,present表示添加定时任务,也是默认设置,absent表示删除定任务
user #以哪个用户身份运行
ansible server2 -m cron -a 'name="sync time from ntpserver" minute="**/10" job="/sbin/ntpdate 192.168.31.122 &> /dev/null"'
group
用户组模块,添加或删除组
gid #设置组的gid号
name= #管理组的名称
state #指定组状态,默认为创建,设置值为absent 为删除
system #设置值为yes,表示创建系统组
ansible server2 -m group -a 'name=g1 gid=1010 state=present'
#创建
ansible server2 -m group -a 'name=g1 state=absent'
script
在指定节点运行服务端脚本
vim wan.sh
#!/bin/bash
date > /app/data.log
################################################
ansible server2 -m script -a './wan.sh'
unarchive
解压缩
默认情况下,此模块会将本地压缩包拷贝到远程机器上解压,当设置了remote_src=yes选项表示解压远程主机上的压缩包
src #必选项,要解压的包名
dest #必选项,解压到哪个目录下
remote_src #yes 解压远程主机上的包
#no 将管理机上的包传到远程主机上解压
#打包
tar -cjf 1.tar /etc
###################################################
ansible server2 -m unarchive -a 'src=/root/1.tar dest=/tmp/'
shell
执行bash 指令,让目标主机去执行
ansible server2 -m shell -a 'hostname'
ansible server2 -m shell -a 'uptime'
ansible server2 -m shell -a 'yum -y install httpd'