ansible的概述:
ansible是一款类Unix系统开发的自由开源的配置和自动化工具,本质是一种插件;其由Python语言开发而来,类似于saltstack和Puppet;ansible只需要在一台普通的服务器上运行即可,不需要在客户端服务器上安装客户端,因为ansible是基于SSH进行远程管理,而Linux服务器大都离不开SSH,因此ansible不需要为配置工作添加额外的支持,从而很简单地实现一对多的工作模式。
ansible的工作原理:
ansible分为控制端和被控端,主要是基于SSH协议去管理被控端主机,且被控端是无需安装任何插件的;ansible会读取控制端hosts文件,根据文件中定义IP列表信息,调取本地的各个模块对被控端主机实现批量、并发的配置管理和维护,如果任务比较复杂则可以编写成PlayBook剧本进行分发管理。
ansible的特点:
部署简单:无客户端,只需在主控端部署ansible环境,被控端无需做任何操作
模块化:调用特定的模块,完成特定任务
默认使用SSH协议对设备进行管理
主从集中化管理
配置简单、功能强大、扩展性强
支持API及自定义模块,可用过Python扩展
通过PlayBook来定制强大的配置、状态管理
对云计算平台、大数据都有很好的支持
ansible的实验环境:
Ansible是新出现的自动化运维工具,主要适用于一台主机同时控制多台主机,实现了批量系统配置、批量程序部署、批量运行命令等功能。需要注意的是ansible是基于模块工作的,本身没有批量部署的功能,真正具有批量部署的是ansible所运行的模块
ansible的实验可以使用三台主机,可使真机作为ansible服务器,也就是作为主控机。再使用两台虚拟机作为被控机,三台主机之间是可以实现网络互通的。两台受控主机不需要做环境设定。
ansible的安装:
镜像文件并不提供ansible服务,因此需要使用epel源安装该服务,可以使用阿里云的epel源或者官方提供的epel源。
通过使用epel镜像源,ansible安装成功:
ansible的基本信息:
/etc/ansible/ansible.cfg 全局配置文件,默认情况很少修改
/etc/ansible/hosts 全局清单文件
输入rpm -qc ansible命令可以查看ansible的配置文件:
构建ansible清单:
全局清单:
编辑/etc/ansible/hosts全局清单文件,加入受控主机清单列表,可以直接书写受控主机名或ip,一行一个。
设定受控主机的组:
将一些主机设定到一个组中。
清单查看:
ansible 清单中组名称 [-i 清单文件] - -list-hosts 查看某个组列表中的清单,加上中括号的内容表示列出某个文件中的所有主机
ansible ungrouped - -list-hosts 查看全局清单文件中,不属于任何组的主机
ansible all - -list-hosts 查看全局清单文件中的全部主机列表
编辑/etc/ansible/hosts全局清单 文件,在文件末尾直接添加ip:
使用ansible all --list-hosts命令,可以查看添加ip:
设定受控组:
可以将主机的ip设定在组中:
查看清单:
ansible 清单中组名称 [-i 清单文件] - -list-hosts 查看某个组列表中的清单,加上中括号的内容表示列出某个文件中的所有主机
ansible ungrouped - -list-hosts 查看全局清单文件中,不属于任何组的主机
ansible all - -list-hosts 查看全局清单文件中的全部主机列表
嵌套清单:
批量化添加:
指定其他清单文件:
在其他文件创建清单:
查看清单,发现默认清单不为/mnt/westos:
指定清单文件为/mnt/westos,成功:
在组外添加ip:
可知192.168.31.2不为组中的内容:
ansible命令指定清单的正则表达式:
* 所有
: 逻辑或
:& 逻辑与
:! 逻辑非
~ 以关键字开头
~(str1 |str2) 以条件1或条件2开头
*代表所有:
:代表逻辑或:
:&代表逻辑与:
:!表示逻辑非:
ansible配置文件参数详解:
使用方法:ansible 清单中组名称 -m 模块 -u remote_user。模块就相当于命令
-k参数表示输入密码;-a参数表示shell的命令
ansible运行方式:将命令转化成python语言,然后上传到被控主机,执行完后,再删除
注意:ansible控制主机时,使用的用户身份是什么 ,登陆被控主机时,默认使用的身份就是什么
配置文件的分类与优先级:
配置文件 优先级
/etc/ansible/ansible.cfg 基本配置文件,找不到其他配置文件此文件生效
~/.ansible.cfg 用户当前目录中没有ansible.cfg此文件生效
./ansible.cfg 优先级最高
常用的配置参数:
inventory 指定清单路径
remote_user= 在受控主机上登陆的用户名称,未指定使用当前用户
ask_pass= 是否提示输入ssh密码,如果公钥登陆设定为false
library= 库文件存放目录
local_tmp= 本机临时命令执行目录
remote_tmp= 远程主机临时py命令文件存放目录
forks= 默认并发数量
host_key_checking= 第一次连接受控主机时时,是否要输入yes建立host_key
sudo_user= 默认sudo(权力下放)用户
ask_sudo_pass= 每次在受控主机执行ansible命令时是否询问sudo密码
module_path= 默认模块,默认使用command,可以修改为shell
log_path= 日志文件路径
– –
[privilege_escalation] 身份信息设定
become= 连接后是否自动切换用户
become_method= 设定切换用户的方式,通常sudo
become_user= 在受控主机中切换到的用户,通常为root
become_ask_pass= 是否需要为become_method提示输入密码,默认为false
1.编辑受控主机ip:
2.查看westos连接:
3.未输入密码,报错:
4.编辑/etc/ansible/ansible.cfg 主配置文件,在71行处取消注释,表示主控机登陆被控机时,不进行输入yes这个步骤:
5.输入“ansible westos -m ping -k”命令,-k参数表示输入密码,输入密码后可成功登陆被控主机且执行-m后面的模块。注意这里两台被控机的密码需要一致。成功ping通:
6.尝试把被控主机的主机名抓取出来:
7.输入“ansible westos -m shell -a ‘useradd test’ -k”命令,表示建立用户:
8.查看改变结果:
9.删除用户:
10.添加路径:
11.更改远程连接用户为westos:
12.编辑/etc/ansible/ansible.cfg 主配置文件,写入内容如下,
[privilege_escalation]
become=True
become_method=sudo
become_user=root
become_ask_pass=Ture
13.输入visudo命令,更改命令。
14.成功
免密登录以及构建用户级ansible操作系统:
免密登录:
1.输入ssh-keygen命令,在主控机里获得密钥。
2.进入".ssh/"目录,查看有公钥和私钥。
3.输入ssh-copy-id -i id——rsa.PUB ....
将密钥给两台受控主机的用户。
4.在被控主机做权力下放的免密登录。
5.编辑主配置文件,将become_ask_pass=False改为False,表示不要需要输入权力转换时的密码。默认登录用户不做更改。
6.免密登录成功。
用户级ansible环境设置:
1.首先将配置文件恢复成之前的样子,做过的设定都注释掉。
2.进入家目录,建立一个.ansible目录,若目录存在则不用建立。
3.进入该目录,将配置文件复制到该目录下,再将目录清单复制到该目录下建立的inventory文件中。
4.编辑该目录配置文件。
5.将该目录下的配置文件的module_name参数设定为shell,表示模块默认设定成shell,此时就不用再输入-m shell 了,因为默认就是shell模块;原始默认模块是command。
1.ssh-keygen:
2.
3.
4.因为这里是root权限,所以直接免密登录成功: