自动化运维工具--ansible

  |   3,382 浏览

简介

ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能,如果你有几十上百台服务器需要去维护,那么ansible就是首先。

环境准备

服务器名称服务器IP角色
node1192.168.56.101ansible主控端
node2192.168.56.102被控端
node3192.168.56.103被控端

注意:实现批量运维海量服务器,ansible最大的优势是只需要在一台服务器中安装ansible包即可。被控端是不需要安装客户端程序的。极大简化了安装配置的步骤。

安装

在node1服务器上安装ansible
可直接在线yum安装:

$ yum install -y ansible

也可以到官方网站下载源代码,编译安装,官方均有编译安装的步骤。

配置

安装完成后,ansible安装家目录为:/etc/ansible/
下面就以实现批量操控node2,node3两台服务器为例来进行配置。
1、到/etc/ansible/hosts主机列表配置文件中增加我们要操控的两台服务器的ip地址

$ vi /etc/ansible/hosts
追加以下内容
[web]
node2 ansible_ssh_host=192.168.56.102  ansible_ssh_user=root
node3 ansible_ssh_host=192.168.56.103  ansible_ssh_user=root

2、接下来我们来试着进行ssh免密认证配置的操作,下面两个命令就比较重要了。
ssh-keygen:这个命令是用来生成本机的公钥和私钥的
ssh-keyscan:这条命令是用来把远程服务器的公钥来获取到本地的
在node1主控端服务器上生成公钥私钥,命令如下,执行后一路回车就可以生成了:

$ ssh-keygen -t rsa

生成的密钥文件目录在:/root/.ssh/下面
接着把node1上的公钥发送到node2,node3两台服务器中去,命令如下:

#将node2,node3被控端的公钥添加到node1主控端
$ ssh-keyscan 192.168.56.102 192.168.56.103 >> /root/.ssh/known_hosts
#批量将node1中的公钥发送到node2,node3被控端
$ ansible all -m authorized_key -a "user=root state=present key=\"{{ lookup('file', '/root/.ssh/id_rsa.pub') }} \"" -k

注意,执行上面这条命令时,如果提示错误信息:Aborting, target uses selinux but python bindings (libselinux-python) aren’t installed!
则表示node2,node3两台服务器已经开启了selinux。如果需要批量发送,则需要关闭selinux。
如果服务器不想关闭selinux,那只能自行将公钥添加到被控端服务器中去。
方法步骤如下:

#查看node1主控端生成好的公钥文件内容
$ cat /root/.ssh/id_rsa.pub
#复制该文件中的内容
#分别在node2,node3被控端服务器上面编辑以下文件
$ vi /root/.ssh/authorized_keys
#如果文件不存在,则自行创建。将node1主控端的生成的公钥内容,追加到此文件中。

当然上面的方法是纯手工来回复制,也可以使用下面的命令,直接拷贝过去

$ ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.56.102
$ ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.56.103

到这里配置就完成了。注意node1主控端生成的公钥和私钥两个文件不要删除。否就得重来一遍。

测试

#查看被控节点的服务器名称信息
$ ansible web -m shell -a 'uname -a'