1.确保机器上安装的是 Python 2.6 或者 Python 2.7 版本:
python -V
2.查看yum仓库中是否存在ansible的rpm包
yum list|grep ansible
若不存在或是低版本可更换yum源或者采用源码安装
阿里云的yum源:http://mirrors.aliyun.com/repo/ 备份源文件,然后下载对应的版本至/etc/yum.repos.d/目录即可,如epel-6.repo (通过该yum源安装ansible会依赖python 2.6,如果python版本是2.7以上可能会安装失败)
3.安装ansible服务:
yum install ansible -y
4.修改ansible配置和主机列表hosts:
1)关闭第一次使用ansible连接客户端时输入命令提示:
sed -i "[email protected]\#host_key_checking = [email protected]_key_checking = [email protected]" /etc/ansible/ansible.cfg
指定日志路径:
sed -i "[email protected]\#log_path = \/var\/log\/[email protected]_path = \/var\/log\/[email protected]" /etc/ansible/ansible.cfg
2)将所有主机ip加入到/etc/ansible/hosts文件中:
定义主机组和主机
默认ssh的端口为22端口,如果为其他端口号,可在主机名后面加上端口号,如 192.168.159.131:9604 ,也可以修改配置文件中的remote_port变量值
/etc/ansible/hosts也可以定义一个主机范围,如192.168.159.[100:200] ,表示192.168.159.100 - 192.168.159.200 的主机
5.创建和配置 SSH 公钥认证(免密码登录):
ssh-keygen -t rsa
按提示使用默认配置一路回车即可:
6.通过ansible将公钥分发至各主机上:
ansible all -m authorized_key -a "user=root key=‘{{ lookup(‘file‘, ‘/root/.ssh/id_rsa.pub‘) }}‘ path=/root/.ssh/authorized_keys manage_dir=no" --ask-pass -c paramiko
需要输入主机的密码,若是有的主机密码不一致,那么该主机会分发失败,此时只需再执行一遍命令输入该主机密码即可。或者先将密码相同的主机进行分组,然后依次指定主机组执行命令分批分发公钥。
此命令是通过追加的方式来推送公钥至authorized_keys,所以不用担心原来的文件内容会被覆盖。
到任意一台主机上查看,可以看到公钥已成功推送:
7.修改ansible配置,指定私钥文件路径:
sed -i "[email protected]\#private_key_file = \/path\/to\/[email protected]_key_file = \/root\/.ssh\/[email protected]" /etc/ansible/ansible.cfg
8.测试:
可以在命令后面加上-vvvv参数查看详细的输出结果,尤其是在命令执行失败需要排错的时候非常有用。
9.自动化安装脚本:
注意:
①执行脚本前需要配置/root/hosts主机列表文件,内容如:
[[email protected] ~]# cat /root/hosts
[app]
192.168.159.130
[web]
192.168.159.131
②脚本分发公钥至远程主机时会提示输入远程主机的密码
③脚本通过yum方式安装
脚本内容:
#!/bin/bash # ############################################# # author:ellen # describes:自动化安装和配置ansible # version:v1.0 # updated:20170531 ############################################# # # 主机列表文件 hostfile=‘/root/hosts‘ # 错误信息以红色显示 function _err { echo -e "\033[1;31m[ERROR] [email protected]\033[0m" } # 一般信息以绿色显示 function _info { echo -e "\033[1;32m[Info] [email protected]\033[0m" } # 仅限指定用户运行本脚本 if [ $EUID != "0" ];then echo "Please use root run script!!!" exit 1 fi rpm -qa|grep ansible if [ $? -eq 0 ];then _err "ansible 已存在,无需重复安装!退出..." exit 1 fi if [ -e $hostfile ];then yum list|grep ansible if [ $? -ne 0 ];then _err "仓库不存在ansible的rpm包,退出..." exit 1 else yum install ansible -y if [ $? -eq 0 ];then _info "ansible 安装完毕..." sed -i "[email protected]\#host_key_checking = [email protected]_key_checking = [email protected]" /etc/ansible/ansible.cfg sed -i "[email protected]\#log_path = \/var\/log\/[email protected]_path = \/var\/log\/[email protected]" /etc/ansible/ansible.cfg cp $hostfile /etc/ansible/hosts _info "$hostfile 已拷贝至 /etc/ansible/目录" ssh-keygen -t rsa -P ‘‘ -f /root/.ssh/id_rsa _info "请按以下提示输入 ${hostfile} 列表中的主机密码:" ansible all -m authorized_key -a "user=root key=‘{{ lookup(‘file‘, ‘/root/.ssh/id_rsa.pub‘) }}‘ path=/root/.ssh/authorized_keys manage_dir=no" --ask-pass -c paramiko sed -i "[email protected]\#private_key_file = \/path\/to\/[email protected]_key_file = \/root\/.ssh\/[email protected]" /etc/ansible/ansible.cfg _info "ansible 已部署完毕!" else _err "ansible 安装失败!" fi fi else _err "$hostfile 主机列表文件不存在,请检查!" exit 1 fi