1. Ansible 的基本概念与特点
1.1 什么是 Ansible?
**Ansible 是一款开源的自动化工具,广泛应用于配置管理、应用部署、任务自动化以及多节点管理等领域。**它由 Michael DeHaan 于 2012 年创建,ansible目前已经已经被红帽官方收购,是自动化运维工具中大家认可度最高的,并且上手容易,学习简单。是每位运维工程师必须掌握的技能之一。
1.2 Ansible 的核心特点
1.2.1 无代理架构
Ansible 的无代理架构意味着不需要在被管理的节点上安装任何专门的代理软件。它通过 SSH与被控节点通信,实现任务的执行和数据的传输。
优点:
-
简化部署:无需在每个被控节点上安装和维护代理程序,减少运维工作量。
-
提高安全性:减少了潜在的攻击面,因为不需要开放额外的端口或运行额外的服务。
-
节省资源:避免了代理软件占用系统资源的问题。
1.2.2 基于 SSH
Ansible 通过 SSH 协议与被控节点进行通信,这使得它能够在大多数类 Unix 系统(如 Linux、BSD、macOS)上无缝运行。同时,Ansible 也支持 Windows 主机,通过 PowerShell 或 WinRM 进行管理。
优势:
-
广泛兼容性:支持多种操作系统,无需额外配置。
-
安全性高:利用现有的 SSH 安全机制,确保数据传输的机密性和完整性。
1.2.3 声明式任务定义
Ansible 使用声明式语言(YAML)定义任务,描述目标状态而非具体的执行步骤。这种方式使得配置更加直观、易读,同时减少了错误和不一致性。
特点:
-
可读性强:YAML 格式简洁明了,易于理解和编写。
-
可重用性高:通过 Playbook 和角色(Roles)的复用,实现复杂任务的模块化管理。
-
幂等性:确保多次运行相同的任务不会导致不一致的状态。
2. Ansible 的安装
2.1 支持的操作系统
-
控制节点:主要支持 Linux 发行版(如 Ubuntu、CentOS、Debian)、macOS,以及通过 WSL 在 Windows 上运行。
-
被控节点:支持几乎所有类 Unix 系统(Linux、BSD、macOS 等),部分模块支持 Windows 系统。
2.2 安装方法
Ansible 提供了多种安装方式,适应不同的操作系统和需求。以下是常见的安装方法:
方法 1:通过系统包管理器安装
在 Ubuntu/Debian 上安装
apt install ansible -y
在 CentOS/RHEL 上安装
yum install ansible -y
在 RockyLinux9上安装
yum install ansible-core -y
查看版本信息:
方法 2:通过 pip 安装
安装步骤 1、安装 Python 和 pip(如果尚未安装):
在 Ubuntu/Debian:
apt install python3 python3-pip -y
在 CentOS/RHEL:
sudo yum install python3 python3-pip -y
2、使用 pip 安装 Ansible:
pip3 install ansible
3. 控制节点和被控节点做免密登录
控制节点是运行 Ansible 的主机,负责发送任务并收集结果。被控节点是被 Ansible 管理的主机,无需安装任何额外软件,仅需确保 SSH 服务正常运行,并具备必要的访问权限。
ssh-keygen -t rsa (三次回车,不输入其他信息)
复制本机公钥到其它被控节点
# 执行命令后,输入正确密码即可 ssh-copy-id root@10.0.0.25 ssh-copy-id root@10.0.0.26
测试连接:
# 如果免密做成功则无需密码即可登录 ssh root@10.0.0.25 ssh root@10.0.0.26
如果能够无密码登录,则配置成功。
4 主机清单
**清单(Inventory)定义 Ansible 将要管理的一批主机。**这些主机也可以分配到组中,以进行集中管理。组可以包含子组,主机也可以是多个组的成员。清单还可以设置应用到它所定义的主机和组的变量。
可以通过静态和动态两种方式定义主机清单。本文主要讲解静态的主机清单,静态主机清单是一个文本文件。
4.1 基本语法
-
[组名]:定义一组主机。
-
主机名:每行定义一个主机,主机可以是 IP 或域名。
-
变量:可以通过 key=value 的形式为主机或组添加变量。
4.2 清单配置示例
4.2.1:基本清单
[webservers] 10.0.0.25 10.0.0.26 [dbservers] db1.example.com db2.example.com
4.2.2:主机级别变量
[webservers] 10.0.0.25 ansible_user=admin ansible_port=2222 10.0.0.26 ansible_user=root [dbservers] db1.example.com ansible_host=10.1.1.100 db2.example.com ansible_host=10.1.1.101 ansible_user=postgres
常用内置变量:
变量名 | 描述 |
---|---|
ansible_host | 主机的实际 IP 或域名(默认为清单中定义的主机名) |
ansible_user | 用于连接主机的用户(默认为当前用户) |
ansible_port | SSH 连接端口(默认为 22) |
ansible_password | SSH 密码(通常不推荐明文存储) |
ansible_ssh_private_key_file | SSH 私钥文件路径。 |
4.2.3 组级别变量
组变量使用 [组名:vars]
定义:
[webservers] 10.0.0.25 10.0.0.26 [dbservers] db1.example.com db2.example.com [webservers:vars] ansible_user=admin ansible_port=2222 [dbservers:vars] ansible_user=postgres
4.2.4 嵌套组
可以通过 [子组名:children]
定义组嵌套:
[frontend] web1.example.com web2.example.com [backend] db1.example.com db2.example.com [web:children] frontend backend # 表示 web 组包含 frontend 和 backend 两个子组。
4.3 主机清单常用命令
查看主机清单结构
[root@localhost ~]# ansible-inventoy -i /etc/ansible/hosts --list [root@localhost ~]# ansible all --list-hosts hosts (2): 10.0.0.25 10.0.0.26
-i 参数是指定主机清单位置,默认读取/etc/ansible/hosts文件
检查主机是否可用
[root@localhost ~]# ansible all -m ping 10.0.0.26 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python3" }, "changed": false, "ping": "pong" } 10.0.0.25 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python3" }, "changed": false, "ping": "pong" }
查看主机分组关系
[root@localhost ~]# ansible-inventory --graph @all: |--@ungrouped: |--@web: | |--10.0.0.25 | |--10.0.0.26
5. 配置文件详解
Ansible 的配置文件是 Ansible 的核心组件之一,用于定义其行为和控制方式。
5.1 ansible.cfg 文件说明
ansible.cfg 是 Ansible 的主配置文件,控制着 Ansible 的运行参数。配置文件可以存在于多个位置,
优先级从高到低如下:
-
当前工作目录下的 ansible.cfg
-
用户主目录下的 .ansible.cfg
-
系统目录下的 /etc/ansible/ansible.cfg
5.2 初始化配置文件
在2.12版本后需要通过init来到处默认配置文件,之前的版本直接放置在/etc/ansible/ansible.cfg中
ansible-config init --disabled > ansible.cfg
5.3 常见配置项
配置项 | 说明 |
---|---|
inventory | 指定主机清单文件路径 |
remote_user | 默认远程连接的用户名,如果未指定则使用当前用户名称 |
private_key_file | 默认 SSH 私钥文件路径 |
ask_pass | 是否提示输入ssh密码,默认为false |
roles_path | 指定角色(Roles)的搜索路径 |
library | 指定自定义模块的路径 |
forks | 并发连接数(控制并发任务的数量) |
timeout | 连接超时时间(秒) |
become | 默认是否启用特权提升 |
become_user | 默认提升到的用户,通常是 root。 |
become_method | 提权方法,如 sudo、su |
gather_facts | 是否自动收集主机信息,默认为 True |
module_utils | 自定义模块工具路径。 |
log_path | 指定日志文件路径 |
配置一个基础的ansible.cfg文件
[defaults] inventory = /etc/ansible/hosts remote_user = root forks = 50 timeout = 30 gathering = smart fact_caching_timeout = 86400 [privilege_escalation] become = True become_method = sudo become_user = root become_ask_pass = False
6 执行命令
在完成 Ansible 的安装和环境配置后,执行第一个命令以验证 Ansible 是否正常工作。
6.1 Ping 测试
Ping 测试用于验证 Ansible 能否成功连接到被控节点。使用内置的 ping 模块,这个模块不会真正发送 ICMP 包,而是执行一个简单的 Python 脚本在被控节点上返回 “pong”。
[root@localhost ~]# ansible all -m ping 10.0.0.25 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python3" }, "changed": false, "ping": "pong" } 10.0.0.26 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python3" }, "changed": false, "ping": "pong" }
参数解释
-
all:作用于所有在 Inventory 文件中定义的主机。
-
-m ping:指定使用 ping 模块。
说明:
-
每个被控节点返回一个 JSON 格式的结果。
-
changed: 表示任务是否更改了被控节点的状态。false 表示没有更改。
-
ping: 返回的内容,成功时为 “pong”。
6.2 运行 Shell 命令
Ansible 提供了 shell 和 command 模块,用于在被控节点上执行任意 Shell 命令。两者的区别在于 shell 模块通过 Shell 运行命令,支持管道和重定向,而 command 模块直接运行命令,不经过 Shell。
示例:检查系统运行时间
[root@localhost ~]# ansible all -m shell -a "uptime" 10.0.0.25 | CHANGED | rc=0 >> 20:57:47 up 4 days, 11:50, 2 users, load average: 0.00, 0.03, 0.00 10.0.0.26 | CHANGED | rc=0 >> 20:57:47 up 3 days, 9:10, 2 users, load average: 0.10, 0.03, 0.01
本片文章先简单介绍一下ansible,接下来文章进一下全面展开讲解ansible相关知识点,敬请期待。
如有帮助,请点个赞和“在看”!如有不足,敬请指出!感谢你的关注与支持。
路虽远,行则将至!
事虽难,做则必成!共勉!
题外话
黑客&网络安全如何学习
今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。
1.学习路线图
攻击和防守要学的东西也不少,具体要学的东西我都写在了上面的路线图,如果你能学完它们,你去就业和接私活完全没有问题。
2.视频教程
网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我们和网安大厂360共同研发的的网安视频教程,之前都是内部资源,专业方面绝对可以秒杀国内99%的机构和个人教学!全网独一份,你不可能在网上找到这么专业的教程。
内容涵盖了入门必备的操作系统、计算机网络和编程语言等初级知识,而且包含了中级的各种渗透技术,并且还有后期的CTF对抗、区块链安全等高阶技术。总共200多节视频,200多G的资源,不用担心学不全。
因篇幅有限,仅展示部分资料,需要见下图即可前往获取
🐵这些东西我都可以免费分享给大家,需要的可以点这里自取👉:网安入门到进阶资源
3.技术文档和电子书
技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本,由于内容的敏感性,我就不一一展示了。
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
🐵这些东西我都可以免费分享给大家,需要的可以点这里自取👉:网安入门到进阶资源
4.工具包、面试题和源码
“工欲善其事必先利其器”我为大家总结出了最受欢迎的几十款款黑客工具。涉及范围主要集中在 信息收集、Android黑客工具、自动化工具、网络钓鱼等,感兴趣的同学不容错过。
还有我视频里讲的案例源码和对应的工具包,需要的话也可以拿走。
🐵这些东西我都可以免费分享给大家,需要的可以点这里自取👉:网安入门到进阶资源
最后就是我这几年整理的网安方面的面试题,如果你是要找网安方面的工作,它们绝对能帮你大忙。
这些题目都是大家在面试深信服、奇安信、腾讯或者其它大厂面试时经常遇到的,如果大家有好的题目或者好的见解欢迎分享。
参考解析:深信服官网、奇安信官网、Freebuf、csdn等
内容特点:条理清晰,含图像化表示更加易懂。
内容概要:包括 内网、操作系统、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
🐵这些东西我都可以免费分享给大家,需要的可以点这里自取👉:网安入门到进阶资源
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
侵权,请联系删除。