Ansible简单说明

ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppetcfenginecheffuncfabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。

ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:

(1)、连接插件connectionplugins:负责和被监控端实现通信;

(2)host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;

(3)、各种模块核心模块、command模块、自定义模块;

(4)、借助于插件完成记录日志邮件等功能;

(5)playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。

Ansible的安装配置

  1. 配置yum源,直接yum安装了

  2. 配置自己的epel  清华的学生维护的

  3. 阿里的

#  yuminstall ansible –y     安装

输入ansible -V 可以看到版本信息,说明咱们已经安装成功了

编写咱们的第一个命令

Inventory 这是需要管理的机器都要按照这个个是写,也就说Hosts里面.

先这hosts文件中添加一个咱们的测试,玩玩看吧:

可以直接用域名和用ip来表示:## green.example.com## blue.example.com## 192.168.100.1## 192.168.100.10可以定义组:## [webservers]## alpha.example.org## beta.example.org## 192.168.1.100## 192.168.1.110可以定义一段的规则的域名:## www[001:006].example.com## [dbservers]## ## db01.intranet.mydomain.net## db02.intranet.mydomain.net## 10.25.1.56## 10.25.1.57## db-[99:101]-node.example.com

我在最后把我的一个服务器地址加入:

## [dbservers]

## 

## db01.intranet.mydomain.net

## db02.intranet.mydomain.net

## 10.25.1.56

## 10.25.1.57

# Here's another example of host ranges, this time there are no

# leading 0s:

## db-[99:101]-node.example.com

192.168.61.129   #这是我加入的

接下来咱们运行咱们的第一条命令:

ansible '192.168.61.129' -m ping –k

报错误了,提示什么公钥,

-u:指定连接时的用户名,默认就是root,所以不加该选项也是可以的

    -k:提示输入密码,是--ask-pass的简写形式

    要不修改ansible.cfg配置文件的ask_pass = True给取消注释,要不就在运行命令时候加上-k,这个意思是-k, --ask-pass ask for SSH password。再修改:host_key_checking= False即可,我是直接ssh 192.168.61.129登陆了一次再执行就Ok 了

[root@taotao ansible]# ansible  '192.168.61.129' -m ping -k

SSH password:

192.168.61.129 | FAILED! => {

   "failed": true,

"msg":"Using a SSH password instead of a key is not possible because Host Keychecking is enabled and sshpass does not support this.  Please add this host's fingerprint to yourknown_hosts file to manage this host."

ansible '192.168.61.129' -m shell -a 'date' –k   再来一个命令

一个小实验

把公钥发给其他机器,实现免密码登陆

先这Ansible机器生成密钥对 : ssh-keygen -t rsa -b 2048  一路回车

 

先搜集登陆的主机的公钥

Ssh –keyscan命令

这样就收集完成了

下面的参数自己百度查看把:

用到的模块是anthorized_key

在当前目录新建立了一个ssh-addkey.yml 文件和用到的命令:ansible-playbook

ansible-playbook ssh-addkey.yml –k   执行这个命令批量推送

报错了,需要在远端主机运行  setenforce 0

ansible all -m yum -a 'name=libselinux-pythonstate=present' –k   还要安装这个包

 

再次运行就OK

这远端关闭了selinux

最后执行命令ansible-playbook ssh-addkey.yml -k

再执行就不用加k 选项了直接不用密码用key来登陆执行:

实际上也可以用ansiblecopy模块这样也可以达到把公钥发给其他主机指定目录,留给大家测试吧:

 

ansible all -m copy -a'src=/etc/ansible/ssh-addkey.yml dest=/tmp/ssh_addkey.yml'

今天就到这里,改天再来聊聊模块,role,task等吧。