mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5
836 字
2 分钟
Ansible学习笔记(1)
2026-03-25

写在前面#

Ansible是一款通过ssh来实现批量自动化的工具,理论上,只要能使用ssh完成的操作,Ansible都能做到,支持多类型主机且部署方便,这里记录下自己学习此软件的笔记,会随学习进度更新

附上Ansible的文档:链接

提示

本文所有内容运行基于Centos7-2009版本 管理机ip为:192.168.255.130 被管理机ip为:192.168.255.131

部署#

1.安装Ansible软件

sudo yum install epel-release -y
sudo yum install ansible -y

被管理机只需要启动ssh服务且py版本大于2.4即可

2.配置ssh

为管理机添加免密登录

ssh-keygen
ssh-copy-id 192.168.255.131

3.修改主机目录

Ansible需要知道自己管理的机器有哪些,默认的主机目录文件路径在**/etc/ansible/hosts**,可以直接修改

  • 最基本的hosts文件样式
192.168.255.131
server.text.com
  • 带分组的hosts文件样式
[web]
192.168.255.131
server.text.com

管理#

Ansible可以使用命令,也可以脚本来管理主机

1.命令

ansible 是最基本的命令,用于在远程主机上一次性执行模块

ansible <主机模式> -i <清单文件> -m <模块名> -a "<模块参数>" [选项]

一些常用选项,可以在文档中找到更加详细的选项

  • -i 或 —inventory:指定清单文件(默认 /etc/ansible/hosts)
  • -m:指定要使用的模块(默认 command)
  • -a:传递给模块的参数
  • -f: 指定要使用的并行进程数(用于重复执行)

2.脚本

Ansible使用了格式为YAML的脚本playbook,能够方便的管理主机

要执行脚本的指令如下

ansible-palybook [文件名]

playbook内包含了以下关键词

  • hosts:执行主机的ip、域名或主机组,也可以使用all
  • remote_user:以指定用户身份执行
  • vars :用于创建变量
  • tasks:定义顺序执行的动作,每一个动作调用一个模块

下面贴一个为主机组web简单部署Apache服务的yml文件

提示

yaml使用缩进表示层级关系,缩进的空格数不重要,只要相同层级的元素左对齐即可,冒号后面要加空格 如果有语法报错可以丢到在线校验器中或者使用ide来编写或者直接写json文件再转换

---
- hosts: web #表示执行此脚本的对象为[web]主机组
remote_user: root #表示使用root用户执行此脚本
tasks: #下方定义了要执行的动作
- name: Install httpd #标注执行的操作,注意一个name里只能包含一个模块调用
yum: name=httpd state=latest #调用yum模块下载名称为httpd的包的latest版本

tasks的一些常用模块,可以在文档中找到更加详细的说明

  • Ping:ping指定远程主机,如果连接成功,则返回pong
  • debug:用于调试的模块,作用类似于echo命令
  • copy:从本地复制文件到远程主机
  • template:从本地复制文件到远程主机,但可以使用变量进行替换其中的内容
  • file:设置文件属性
  • user:管理用户账户
  • yum:使用包管理器
  • service:管理远程主机中的服务
  • firewalld:管理防火墙中的服务和端口
  • shell:在远程主机上执行shell命令

下面来升级一下上面的案例,让我们在安装Apache服务并使用template模块读取脚本中的变量来更改默认的index.html,我会在代码中标注详细的执行流程

---
- hosts: web #表示执行此脚本的对象为[web]主机组
vars:
textname: "buwang" #此处使用了vars创建了变量textname
remote_user: root
tasks:
- name: Install httpd #和上方案例中的安装指令稍稍有些不一样,但表达的功能是一样的
yum:
name: httpd
state: latest
- name: Deploy custom index page #使用template渲染httpd.html.j2模板并替换远程主机中的内容
template:
src: httpd.html.j2
dest: /var/www/html/index.html
- name: Restart httpd service #做完全部工作后使用service重启httpd服务
service:
name: httpd
state: restarted

httpd.html.j2的内容如下,这个文件是py的jinja2模板引擎,目前只需要知道变量在其中使用{{}}表达就行了

<html>
<body>
<h1>欢迎来到 {{ ansible_facts['hostname'] }}</h1>
<p>IP地址:{{ ansible_facts['default_ipv4']['address'] }}</p>
<p>变量内容为{{textname}}</p>
</body>
</html>
分享

如果这篇文章对你有帮助,欢迎分享给更多人!

Ansible学习笔记(1)
https://www.yisibuwang.top/posts/2026-03-25-ansible学习笔记1/
作者
buwang
发布于
2026-03-25
许可协议
CC BY 4.0

部分信息可能已经过时

相关文章 智能推荐
1
ansible学习笔记
笔记 ansible是一款开源的it自动化引擎,你可以把它理解成一个统一的指挥棒,用来管理成百上千台服务器。它的核心目标就是简单和易用,旨在消除重复性工作,简化复杂的工作流程,我会尽可能的记录学习到的功能并添加一些简单案例
2
Ansible学习笔记(2)
学习 关于Role,用我的理解来说,你写了一个安装和配置 httpd 的 Playbook,里面有一堆任务、变量和模板,Role 就是把这些东西打包成一个“积木包”。以后想装 httpd,直接拿来用就行,还可以灵活向里面修改添加变量以适应需求
3
在windows上安装并简单配置wsl
学习 记得挺久之前微软在宣布更新windows11的时候,就说过wsa和wsl,分别是全程分别是 适用于android的windows子系统 和 适用于liunx的windows子系统,当时我也是因为wsa升级的win11,而wsl听说很垃圾就没有接触过,这几天在群里水群的时候看到有人在用这个,发现这个依旧更新到了2.0版本,据说是好用了很多,便试了试并记录
4
解决虚拟机无法共享宿主机Clash代理问题
踩坑记录 最近我想要在我的虚拟机上运行docker,但运行时却出现镜像容器pull不下来的问题,明明宿主机上的Clash开启了局域网连接,虚拟机内的系统也正确的配置了地址,但就是无法连接
5
博客已升级并对所有文章链接进行的更改
博客更改记录 博客已升级到mizuki V9.0,并进行了多项改动