Ansible
2.1 Ansible 介绍
(1)Ansible 不需要安装客户端,通过 sshd 去通信(无密钥登录)。
(2)Ansible 基于模块工作,模块可以由任何语言开发。
(3)Ansible 不仅支持命令行使用模块,也支持编写 Yaml 格式的 playbook,易于编写和阅读。
(4)Ansible 安装十分简单,CentOS 上可直接 Yum 安装。
(5)一本不错的入门电子书 https://ansible-book.gitbooks.io/ansible-first-book/
2.2 Ansible 安装
(1)环境准备
创建两台虚拟机,关闭防火墙和selinux,ping通百度
关闭sellinux如果是通过修改文件,修改完后一定要重启虚拟机,如果使用的是setenforce 0,则不需要
# systemctl stop firewalld
# systemctl disable firewalld
# vi /etc/selinux/config
把 SELINUX 后的单词改为:disabled
#vi /etc/hosts //添加虚拟机IP地址及主机名
在末尾添加:
192.168.2.10 ansible-test1
192.168.2.20 ansible-test2
(2)安装 Ansible
准备两台机器 anisble-01 和 anisble-02,只需要在 anisble-01 上安装 Ansible,先安装 epel 仓库。
#yum install epel-release -y
#yum install -y ansible
#ansible --version
(3)免密配置
anisble-01 上生成密钥对 ssh-keygen -t rsa,把公钥放到 anisble-02 上,设置密钥认证。
#ssh-keygen -t rsa //一直回车就行
#ssh-copy-id 192.168.2.10 //拷贝给本机(testhost是要写成192.168.2.10,如果是写成127.0.0.1,这里就要ssh-copy-id 127.0.0.1)
#ssh-copy-id 192.168.2.20 //拷贝给另一台机器(有多台情况下也要拷贝)
#ssh 192.168.2.20
Last login: Mon Dec 21 21:51:52 2020 from ansible-test1
#exit //退出
logout
Connection to 192.168.2.20 closed.
(4)主机组设置
在/etc/ansible/hosts 文件中添加本机和另一台机器的 IP;
#vi /etc/ansible/hosts //说明:testhost 为自定义的主机组名字,下面两个 IP 为组内的机器 IP
[testhost]
127.0.0.1 ansible_ssh_pass=123456 ansible_ssh_user=root
192.168.2.20 ansible_ssh_pass=123456 ansible_ssh_user=root
2.3 Ansible 远程执行命令
这样就可以批量执行命令了。这里的 testhost 为主机组名,
-m 后边是模块名字,
-a 后面是命令,
-k ask for SSH password 登录密码,提示输入SSH密码而不是假设基于密钥的验证,
当然我们也可以直接写一个 IP,针对某一台机器来执行命令。
#vi /etc/ansible/ansible.cfg
搜索 host_key 把前面的注释符去掉,保存退出!
#ansible testhost -m command -a "hostname" //无需密码执行命令,并反馈正确信息
#ansible 192.168.2.20 -m command -a "hostname" //通过IP地址,针对某一台机器来执行命令。
2.4 Ansible 拷贝文件或目录
源目录会放到目标目录下面去,如果目标指定的目录不存在,它会自动创建。如果拷贝的是文件,如果 dest 指定的名字和源不同,并且它不是已经存在的目录,相当于拷贝过去后又重命名。但相反,如果 desc 是目标机器上已经存在的目录,则会直接把文件拷贝到该目录下面。
#ansible 192.168.2.20 -m copy -a "src=/etc/passwd dest=/tmp/123"
这里的/tmp/123 和源机器上的/etc/passwd 是一致的,但如果目标机器上已经有/tmp/123 目录,则会再/tmp/123 目录下面建立 passwd 文件。
2.5 Ansible 远程执行脚本
首先创建一个shell脚本。
##!/bin/bash
echo `date` > /tmp/ansible_test.txt
然后把该脚本分发到各个机器上。
#ansible testhost -m copy -a "src=/tmp/test.sh dest=/tmp/test.sh mode=0755"
最后是批量执行该 shell 脚本。
#ansible testhost -m shell -a "/tmp/test.sh"
shell 模块,还支持远程执行命令并且带管道。
#ansible testhost -m shell -a "cat /etc/passwd |wc -l"
#cat /tmp/ansible_test.txt
2.6 Ansible 管理任务计划
创建任务计划,命名并定义工作。
#ansible testhost -m cron -a "name='test cron' job='/bin/bash/tmp/test.sh' weekday=6"
若要删除该cron只需要加一个字段 state=absent
#ansible testhost -m cron -a “name=‘test cron’ state=absent”
其他的时间表示,分钟:minute;小时:hour;日期:day;月份:month。
2.7 Ansible 安装 RPM 包/管理服务
使用 Yum 模块安装 httpd 服务:
#ansible testhost -m yum -a "name=httpd" //这里显示success是因为博主执行了两次这个命令,第一次执行命令
显示CHANGED即为成功,只是太占篇幅,选择不列出
在name后面还可以加上 static=installed/removed。
设置服务状态,这里的name是CentOS系统里的服务名,可以通过chkconfig-list 命令查到。
#ansible testhost -m service -a "name=httpd state=started enabled=yes"