三台主机关闭防火墙:
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0
安装步骤:
控制主机安装ansible并生成密钥对批量发送给被管理主机
1.yum安装环境包与ansible:
yum install epel-release -y
yum install ansible –y
2.查看ansible版本
[root@01 ~]# ansible --version

3.yum安装完成后会生成3个文件
[root@01 ~]# cd /etc/ansible/
[root@01 ansible]# ls

4.配置被管理端主机IP清单
[root@01 ansible]# vim /etc/ansible/hosts
//配置主机清单

5.虽然ansible的配置文件已经设置完成被管理端的IP地址,但是因为ansible是基于ssh协议,所以还需要配置密钥对验证
[root@01 ~]# ssh-keygen -t rsa
//生成密钥对


6.ssh协议免交互代理
[root@01 ~]# ssh-agent bash
[root@01 ~]# ssh-add

shell脚本批量发送公钥
(1).下载安装expect
[root@01 .ssh]# yum install expect -y
//yum安装expect
(2). ping通所有可互通的主机
[root@01 .ssh]# ansible all -m ping
//使用ansible中的ping模块

ansible是基于SSH协议,所以可以ping通的主机储存在.ssh/known_hosts的文件当中。当然就算不ping通也可以用shell脚本实现批量推送公钥。
在最新版本ansible 2.7.0中,在没有推送公钥形成密钥对的情况下,无法使用ping模块ping通的情况下,很难用authorized_key模块去推送公钥的。所以我更改了下shell脚本,这样就可以在无法用ping模块ping通的情况下直接实现批量推送公钥形成密钥对。
[root@01 ~]# cd ~/.ssh/
[root@01 .ssh]# ls
id_rsa id_rsa.pub known_hosts
[root@01 .ssh]# vim known_hosts
//查看下已经记录在SSH协议的主机,不做任何修改操作

(2).编写shell脚本实现批量推送公钥
[root@01 .ssh]# vim ~/.ssh/pushssh.sh
脚本如下:
#!/bin/sh
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
host1=`cat /etc/ansible/hosts | awk -F " " '{print $1}' | grep '^192'`
#在生产情况中,有很多种获得IP的方法,本脚本最重要的就是获得IP地址,脚本只是提供一个思路。
for i in $host1;
do
command1="scp ~/.ssh/authorized_keys root@$i:~/.ssh/authorized_keys"
password="123123"
/usr/bin/expect -c "
spawn ssh-copy-id root@$i
expect {
\"*password\" { send \"$password\r\"; exp_continue }
}
expect eof"
done
#编写脚本完成后保存退出
[root@01 .ssh]# sh pushssh.sh
//执行脚本
PS:想要执行这个脚本,首先需要下载安装expect,同时被管理端主机的密码需要是一致的。
----------------------验证-------------------
查看下脚本是否执行成功:


此时就可以进行ansible批量部署操作
[root@01 ~]# ansible all -m command -a 'date'

Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx