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权限,所以直接免密登录成功:在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐