CentOS下部署Ansible自動化工具
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 "s@\#host_key_checking = False@host_key_checking = False@g" /etc/ansible/ansible.cfg
指定日志路徑:
sed -i "s@\#log_path = \/var\/log\/ansible.log@log_path = \/var\/log\/ansible.log@g" /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 "s@\#private_key_file = \/path\/to\/file@private_key_file = \/root\/.ssh\/id_rsa@g" /etc/ansible/ansible.cfg
8.測試:

可以在命令后面加上-vvvv參數查看詳細的輸出結果,尤其是在命令執行失敗需要排錯的時候非常有用。
9.自動化安裝腳本:
注意:
①執行腳本前需要配置/root/hosts主機列表文件,內容如:
[root@localhost ~]# 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] $@\033[0m"
}
# 一般信息以綠色顯示
function _info
{
echo -e "\033[1;32m[Info] $@\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 "s@\#host_key_checking = False@host_key_checking = False@g" /etc/ansible/ansible.cfg
sed -i "s@\#log_path = \/var\/log\/ansible.log@log_path = \/var\/log\/ansible.log@g" /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 "s@\#private_key_file = \/path\/to\/file@private_key_file = \/root\/.ssh\/id_rsa@g" /etc/ansible/ansible.cfg
_info "ansible 已部署完畢!"
else
_err "ansible 安裝失敗!"
fi
fi
else
_err "$hostfile 主機列表文件不存在,請檢查!"
exit 1
fi
ansible命令:
在另外兩台機上執行ping命令:ansible group1 -m ping
復制本機文件到組group1:ansible group1 -m copy -a “src=/etc/hosts dest=/etc/”
幫group1安裝軟件:ansible group1 -m shell -a “yum install wget -y”
ansible myservers -a 'pwd
ansible myservers -m script -a "/opt/app/target.sh"
參考:https://www.linuxidc.com/Linux/2017-06/144430.htm
