一,Ansible简介
Ansible是一个自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点。实现了批量系统配置、批量程序部署、批量运行命令等功能。Ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是Ansible所运行的模块,Ansible只是提供一种框架。
Ansible的基本特性:
- no agents:不需要在被管控主机上安装任何客户端;
- no server:无服务器端,使用时直接运行命令即可;
- modules in any languages:基于模块工作,可使用任意语言开发模块;
- yaml,not code:使用yaml语言定制剧本playbook;
- ssh by default:基于SSH工作;
- strong multi-tier solution:可实现多级指挥。
Ansible的优点:
- 轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可;
- 批量任务执行可以写成脚本,而且不用分发到远程就可以执行;
- 使用python编写,维护更简单,ruby语法过于复杂;
- 支持sudo。
二,Ansible安装
1,系统环境准备
系统平台:centos7.4
ansible server:172.31.123.8
ansible client: 172.31.123.9
(1)写入hosts记录,这个一定要写。
(2)关闭selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
2,安装
(1)yum安装
yum -y install python PyYAML python-paramiko python-jinja2 python-simplejson
yum -y install ansible
如果报错,检查yum源。
三,ansible配置
(1)添加配置
vim /etc/ansible/hosts
把client主机ip添加到里面,示例如下:
当主机多的时候可以分组添加
(2)测试
[root@Ansible ~]# ansible test -m command -k -a 'uptime' -u ansible
SSH password:
172.31.123.9 | SUCCESS | rc=0 >>
15:39:37 up 20 days, 14:57, 2 users, load average: 0.14, 0.50, 0.37
参数解释:test(就是刚刚设置的主机组,这里也可以直接输入ip地址),-m (引用模块 ) command(模块名称,模块的作用会在下一篇中详细解释) -k (使用密码登录) -a (执行的命令) -u (指定用户)
(3)ansible连接方式
介绍两种登陆方式
<1>使用 -k 和-u指定用户登录(建议使用),可以统一下所有的client的用户以及密码(如果已经统一可以忽略),方便管理。
<2>配置ssh免密登录
[root@Ansible ~]# ssh-keygen -t rsa --直接回车即可,不用设置密钥密码。
Generating public/private rsa key pair.Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
bc:4e:4e:5f:61:a3:37:08:b0:c4:00:98:90:5b:c6:9f root@Ansible.01.com
The key's randomart image is:
+--[ RSA 2048]----+
|o=... |
|+ + o |
| + . .+ |
|. E. + |
| . S + |
| o + o |
| + o + |
| = . o . |
| o . |
+-----------------+
[root@Ansible ~]# cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
[root@Ansible ~]# chmod 600 /root/.ssh/authorized_keys
将公钥传给被管理的机器节点,在传公钥前,我们需要确认下我们要传的服务器上面是不是存在其他机器的公钥,如果存在,就不能使用scp直接传过去了,因为这样会把原来的公钥覆盖,会造成以前可以免密登录的服务器登录不了,造成不可控的事件发生,所以我们需要把现在公钥里面的东西复制下来,添加到本来就存在的那个公钥的文件里面就可以了。
[root@Ansible ~]# scp /root/.ssh/authorized_keys 172.31.123.9:/root/.ssh/
root@192.168.8.66's password:
authorized_keys 100% 401 0.4KB/s 00:00
到此安装安装配置完成!