Ansible 入门教程:从零开始掌握自动化运维,零基础入门到精通,收藏这一篇就够了

在这里插入图片描述

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_portSSH 连接端口(默认为 22)
ansible_passwordSSH 密码(通常不推荐明文存储)
ansible_ssh_private_key_fileSSH 私钥文件路径。
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 版权协议,转载请附上原文出处链接和本声明。
侵权,请联系删除。

### 关于Linux云计算运维的学习路径 对于希望深入学习Linux云计算运维的人来说,构建一个合理的学习路径至关重要。初期应当明确学习目标和规划好具体的学习路线[^2]。 #### 初级阶段:掌握基础知识与工具 在这个阶段,建议先理解基本概念和技术栈,熟悉常用的命令行操作以及文件系统的结构。可以通过安装Linux虚拟机来创建实验环境,在实际环境中练习各种命令和服务配置[^4]。 #### 中级阶段:深化理解和技能提升 随着对操作系统层面有了初步认识之后,可以进一步探索更高级的话题如网络管理、安全设置等。此时,《Linux/UNIX 系统编程手册》这样的书籍能提供非常有价值的信息帮助加深理论知识的理解[^1]。 #### 高级阶段:专注于特定领域应用 当具备了一定的经验后,则可以根据个人兴趣或者职业发展方向选择专精的方向,比如容器化技术(Docker, Kubernetes)、自动化部署工具(Ansible, Puppet)或是云平台服务(AWS, Azure)。这些主题往往涉及到复杂的架构设计和最佳实践案例分析。 为了更好地指导整个过程中的自学活动,下面列举了几本值得推荐的参考资料: - **《Linux命令行大全》**:全面覆盖了日常工作中需要用到的各种指令及其用法说明; - **《鸟哥的Linux私房菜》**:适合新手入门阅读,内容详尽易懂且贴近实战需求; 此外,还有一篇特别整理过的系列文章专门针对Linux运维方向进行了详细介绍,涵盖了从零开始精通所需的知识点及技巧分享[^3]。 ```bash # 示例:如何查看当前运行的服务列表 systemctl list-units --type=service --state=running ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值