ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。在讲ansible之前,我们先来说一说基于ssh的密匙建立远程连接。
一般情况下,我们在一台主机上使用ssh命令连接另一台主机都需要输入密码。但是今天给大家带来一种用密匙的方式,免去每次远程连接都需要使用密码的繁琐。
首先我们要创建一对密匙(类似于一把锁和一把钥匙)
ssh-keygen -t dsa
-t 表示密匙类型。有两种,一种是dsa,另一种是rsa。随便选哪种都可以。
在使用该命令创建密匙时会要确认密匙存放路径和密匙是否要加密。
此时我们可以加上两个参数来避免这种情况。-f 参数可以指定存放位置,-N参数可以指定密码内容。(双引号内没有空格!)
ssh-keygen -t dsa -f /root/.ssh/id_dsa -N ""
这样我们就可以完成,免交互创建密匙了。接下来是分发密匙。当我们用一下命令分发密匙的时候。会让我们确认我们是否要连接172.16.1.8主机。确认之后还要输入密码。
ssh-copy-id -i /root/.ssh/id_dsa.pub 172.16.1.8
此时我们又可以增加两个参数避免交互
sshpass -p123456 和 -o StrictHostKeyChecking=no (sshpass需要用yum安装一下。)
使用一下命令即可完成面交互分发密匙。
sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsa.pub "-o StrictHostKeyChecking=no 172.16.1.7"
下面是批量分发(利用sh脚本和for循环。)
#!/bin/bash
rm /root/.ssh/id_dsa
ssh-keygen -t dsa -f /root/.ssh/id_dsa -N ""
for ip in 31 41 7
do
sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsa.pub "-o StrictHostKeyChecking=no 172.16.1.$ip"
done
完成以上内容后,我们可以正式开始使用ansible了。
想要使用ansible一键化部署,首先要对ansible进行安装。安装ansible主要分为两种:
控制主机的安装:
yum install -y ansible
受控主机的安装(可选):
yum install -y libselinux-python
安装完成以后我们需要在控制主机上对ansible软件进行配置。在文件中添加受控主机的相关信息(ip地址)。
vim /etc/ansible/hosts
[oldboy]
172.16.1.7
172.16.1.31
172.16.1.41
注意:[oldboy]是将下面三个ip地址包含在oldboy组内。在进行批量化管理的时候直接使用oldboy即可同时对以上三个主机同时管理。
此时ansible已经部署完成。可以使用了。
注意:如果不进行上面的ssh免密交互,则需要在ansible配置文件中加入每台主机的用户名和密码。
172.16.1.31 ansible_user=root ansible_password=123456
接下来我们按照ansible脚本的书写格式进行编写一键化部署Rsync服务。
首先确认好我们要进行哪些操作(最好用一个文本记录下来没不要干什么,方便编写脚本时进行对照)。
rsync服务端部署
a 检查rsync软件是否已经安装
b 编写rsync软件主配置文件
c 创建备份目录管理用户
d 创建备份目录,并进行授权
e 创建认证文件,编写认证用户和密码信息,设置文件权限为600
f 启动rsync守护进程服务
接下来就是脚本的编写:
注意确认好每个步骤所需要用到ansible的哪个模块。可以从官网查询[http://docs.ansible.com/ansible/latest/reference_appendices/YAMLSyntax.html]
同级别的项目注意对齐,否则会报错。
#command play-book
- hosts: 172.16.1.41
tasks:
- name: step01:install rsync
yum: name=rsync state=installed
- name: step02:edit rsync conf file
copy: src=/etc/ansible/conf/rsync_conf/rsyncd.conf dest=/etc/
- name: step03:create rsync user
user: name=rsync state=present createhome=no shell=/sbin/nologin
- name: step04:create rsync auth file
copy: src=/etc/ansible/conf/rsync_conf/rsync.password dest=/etc/ mode=600
- name: step05:create rsync dir
file: dest=/backup/ state=directory owner=rsync group=rsync
- name: step06:boot rsync server
shell: creates=/var/run/rsyncd.pid rsync --daemon
- hosts: 172.16.1.31
tasks:
- name: step01:create auth file
copy: src=/etc/ansible/conf/rsync_conf/rsync_client.password dest=/etc/rsync.password mode=600
执行脚本的方法:
ansible-playbook /etc/ansible/ansible-playbook/test.yaml
可以在命令里加入-C参数,进行模拟执行。进行脚本验证。
ansible-playbook -C /etc/ansible/ansible-playbook/test.yaml