三台主机关闭防火墙:
[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