ansible安装及简介

ansible-简介及基本安装并连接主机

ansible简介

ansible官网
ansible中文文档

ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。Ansible架构相对比较简单,仅需通过SSH连接客户机执行任务即可

ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:
(1)、连接插件connection plugins:负责和被监控端实现通信;
(2)、host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;
(3)、各种模块核心模块、command模块、自定义模块;
(4)、借助于插件完成记录日志邮件等功能;
(5)、playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。

ansible安装

Ansible易于安装。Ansible软件只需要安装到要运行它的一个(或多个)控制节点上。由Ansible管理的主机不需要安装Ansible。

对控制节点的要求:

  1. 控制节点应是Linux或UNIX系统。不支持将Windows用作控制节点,但Windows系统可以是受管主机。

  2. 控制节点需要安装Python3(版本3.5或以上)或Python2(版本2.7或以上)。

  3. 需要epel源。

  4. 关闭防火墙和selinux。

对受控节点的要求:

  1. 控制节点需要安装Python3(版本3.5或以上)或Python2(版本2.7或以上)。
  2. 关闭防火墙和selinux。
yum install ansible -y
[root@eab5aec2df6c ~]# ansible --version
ansible [core 2.15.3]
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.11/site-packages/ansible
  ansible collection location = /root/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/bin/ansible
  python version = 3.11.5 (main, Oct 25 2023, 16:19:59) [GCC 8.5.0 20210514 (Red Hat 8.5.0-20)] (/usr/bin/python3.11)
  jinja version = 3.1.2
  libyaml = True

从以上信息可以看到

  • 配置文件位置ansible.cfg
  • 模块路径
  • python的模块路径
  • ansible的执行文件路径
  • python版本
  • jinja模板引擎的版本
  • Ansible playbook 编写时用到的文件格式

常用模块介绍

模块 作用
ping 检测目标机器是否存活
command 远程执行简单linux命令不支持特殊符号
shell 万能模块,远程执行简单linux命令,支持特殊符号
copy 批量分发文件,管理机器要给所有被管理的机器,批量的发送,更新某文件,某文件夹
file 设置文件的权限和其他属性。
script 在受控端执行控制端的脚本
cron 创建修改定时任务
rsync 使用rsync同步内容。
lineinfile 确保特定行是否在文件中。
yum 使用yum管理软件包。
apt 使用APT管理软件包。
dnf 使用dnf管理软件包。
firewalld 管理防火墙
service 管理服务。
user 添加、删除和管理用户帐户。
group 添加、删除和管理组。
get_url 通过HTTP、HTTPS或FTP下载文件。
raw raw模块可以绕过模块子系统,直接使用远程shell运行命令。python没有安装时使用。

临时命令简介

临时命令可以执行单个Ansible任务,不需要将它保存下来供以后再次运行。无需编写playbook。

语法规则如下:

ansible host-pattern -m module [-a ‘module arguments’] [-i inventory]

参数 释义
host-pattern 指定在其上运行临时命令的受管主机。它可以是清单中的特定受管主机或主机组。
-m 指定使用的模块。
-a 以带引号字符串形式取这些参数的列表。
-i 指定清单文件。
-v 输出更详细的执行过程信息,-vvv可得到执行过程所有信息。
-o 单行输出。
-f 指定并发线程数,默认5个线程。
–private-key 指定密钥文件。
-M 指定模块存放路径,默认/usr/share/ansible,也可以通过ANSIBLE_LIBRARY设定默认路径。
-k 认证密码
-s 相当于Linux系统下的sudo命令。
-t 输出信息至DIRECTORY目录下,结果文件以远程主机命名。
-T 指定连接远程主机的最大超时,单位是秒。
-B 后台执行命令,超NUM秒后中止正在执行的任务。
-P 定期返回后台任务进度。
-U 使用sudo,相当于LInux下的sudo命令。
-c 指定连接方式,可用选项paramiko(SSH)、ssh、local,local方式常用于crontab和kickstarts。
-l 指定运行主机。
–list-hosts 列出符合条件的主机列表,不执行任何命令。
-u 指定远程主机以USERNAME运行命令。
-b 是否使用特级升权,连接后,是否在受控机上切换用户。
–become-method 如何切换用户,也可以指定为su。
–become_user 要在受控机上切换到的用户。
-K 用户的密码(–sudo时使用)。

ansible配置文件

ansible默认配置文件可以在多个位置,若这些文件都存在,则优先级是:
环境变量 ANSIBLE_CONFIG指定的配置文件> 当前目录下的配置文件 > ~/.ansible.cfg配置文件 > /etc/ansible/ansible.cfg配置文件 > 默认配置参数。
我们一般自定义一个配置文件和清单文件。

配置文件参数如下

[defaults]

[defaults]部分设置Ansible操作的默认值。

参数 释义
inventory 表示资源清单inventory文件的位置。
library 指定存放Ansible模块的目录。
remote_tmp 远程执行的文件路径
local_tmp 管理节点的执行路径
forks 默认开启的并发数。
poll_interval 默认轮询时间间隔
sudo_user 默认sudo用户
ask_sudo_pass 是否需要sudo密码
ask_pass 是否需要用户输入连接密码
remote_port 指定连接对端节点的管理端口,默认是22。
module_lang 默认模块和系统之间通信的计算机语言,默认为C语言。
host_key_checking 首次连接是否检查key认证,默认为False,表示跳过。
timeout 连接超时时间
module_name 默认执行的模块
nocolor 默认ansible会为输出结果加上颜色,用来更好的区分状态信息和失败信息。关闭功能设置为1。
private_key_file 在使用ssh公钥私钥登录系统时候,使用的密钥路径。
roles_path 默认下载的Roles存放的目录
log_path 执行日志存放目录
fact_caching getfact缓存的主机信息存放方式
retry_files_save_path 错误重启文件存放目录

[privilege_escalation]

[privilege_escalation]配置Ansible如何在受管主机上执行特权升级

参数 释义
become=True 连接后,是否在受控机上切换用户。
become_method=sudo 如何切换用户,也可以指定为su。
become_user=root 要在受控机上切换到的用户,默认为root。
become_ask_pass=False 切换时是否需要提示设置密码,此时设置True。

[paramiko_connection]

参数 释义
record_host_keys=False 不记录新主机的key以提升效率
pty=False 禁用sudo功能


[ssh_connection]

参数 释义
pipelining = False 管道加速功能,需配和requiretty使用方可生效

[selinux]

参数 释义
libvirt_lxc_noseclabel = yes selinux配置

ansible颜色状态

  • 绿色:命令以用户期望的执行了,但是状态没有发生改
  • 黄色:命令以用户期望的执行了,并且状态发生了改变
  • 紫色:警告信息,说明ansible提示你有更合适的用法
  • 红色:命令错误,执行失败
  • 蓝色:详细的执行过程

ansible主机清单文件

vim /etc/ansible/hosts

通过模块批量管理主机,host-pattern为all表示所有的主机

[模块名]
主机或者ip 后可接ssh端口 用户名 密码
主机或者ip ....................
......
例如:
[web]
192.168.125.1 ansible_port=22 ansible_user=root ansible_password="1111"
192.168.125.2 ansible_port=22 ansible_user=root ansible_password="1111"

支持通用写法,表示www001-www006 6个主机
www[001:006]

当用户名密码port相同时,可以在模块上方定义一个[模块名:vars],参数每行一个键值对
[web:vars]
ansible_port=22 
ansible_user=root 
ansible_password="1111"

[web]
192.168.125.1 
192.168.125.2

ansible连接受控主机

环境如下

主机 ip 主机组
eab5aec2df6c 192.168.125.31 ansible主机
centos70 192.168.125.20 web
centos71 192.168.125.21 web
centos72 192.168.125.23 nfs

ansible主机认证的两种方式

  1. 用户名密码认证
  2. ssh公钥私钥认证

初始化认证的几种方式

方法1
己经基于ssh完成了指纹确认,认证方式
ansible直接用就可以
先一键分发公钥,实现批量免密登录,再ansible免密远程执行命令

方法2
ssh root@192.168.125.20
手动确认yes,写入到本地的known_hosts
手动ssh连接,确认指纹后,再ansible去远程操作

方法3,
直接忽略指纹确认,在主机清单文件中定义好ssh连接配置参数
修改ansible配置文件,打开忽略指纹确认的参数即可
修改如下参数即可

host_key_checking=false

两种方式连接受控主机

方式1:

在ansible主机组做好host解析

编辑清单文件

[web:vars]
ansible_user=root
ansible_password=520140

[web]
centos70
centos71

[nfs]
centos72
生成默认配置文件
ansible-config init --disabled > ansible.cfg

修改配置文件的参数忽略指纹验证
host_key_checking=false

使用ping模块测试连通性
ansible web -m ping

《ansible安装及简介》

方式2:

删除hosts文件中的用户密码配置

ssh-keygen

ssh-copy-id root@192.168.125.20

ssh-copy-id root@192.168.125.21

ssh-copy-id root@192.168.125.22

《ansible安装及简介》

参考

Ansible基础1——介绍安装、清单文件、配置文件、临时命令参数、常用功能模块

点赞

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注