Ansible安装基本原理及操作(初识)

news2024/12/23 23:17:48

作者主页:点击! 

Ansible专栏:点击!

创作时间:2024年4月23日15点18分


Ansible 是一款功能强大且易于使用的IT自动化工具,可用于配置管理、应用程序部署和云端管理。它使用无代理模式(agentless mode)来完成任务,这意味着您无需在目标主机上安装任何额外的软件。Ansible 通过 SSH 连接到目标主机并执行任务。

什么是无代理模式?

Ansible 的无代理模式是一种无需在目标主机上安装任何额外软件的管理方式。与传统的基于代理的配置管理工具不同,Ansible 通过 SSH 连接到目标主机并执行任务。

Ansible 的工作原理

可以概括为以下几个步骤:

  1. 解析 Playbook:Ansible 首先会解析 Playbook 文件,其中定义了要执行的任务列表。Playbook 使用 YAML 编写,YAML 是一种易于阅读和编写的语言。
  2. 建立连接:Ansible 会使用 SSH 连接到目标主机。连接信息在主机清单中定义,主机清单是一个 YAML 文件,其中包含了主机及其相关信息。
  3. 执行任务:Ansible 会根据 Playbook 中的任务列表逐个执行任务。每个任务都使用 Ansible 模块来完成,Ansible 模块是用于执行特定任务的代码块。
  4. 处理结果:Ansible 会处理任务的执行结果,并根据需要进行后续操作。

Ansible 的核心组件

Ansible 的核心组件包括:

Playbook:Playbook 是 Ansible 中用于定义任务列表的文件。Playbook 使用 YAML 编写。

模块:模块是 Ansible 中用于执行特定任务的代码块。Ansible 提供了大量的内置模块,还可以创建自定义模块。

主机清单:主机清单是 Ansible 中用于定义要管理的主机组的文件。主机清单是一个 YAML 文件,其中包含了主机及其相关信息。

变量:变量用于存储和传递数据。Ansible 支持多种类型的变量,包括事实变量、inventory 变量、Playbook 变量和角色变量。

模板:模板用于生成配置文件和其他文本文件。Ansible 使用 Jinja2 模板引擎。

角色:角色是 Ansible 中用于组织任务和变量的集合。角色可以用于共享代码和提高代码的可重用性。

Ansible 的优势

Ansible 具有以下优势:

易于使用:Ansible 使用 YAML 编写,YAML 是一种易于阅读和编写的语言。

功能强大:Ansible 可用于执行各种任务,并且可以扩展以满足新的需求。

无代理:Ansible 不需要在目标主机上安装任何额外的软件。

开源:Ansible 是开源的,这意味着它是免费的并且可以自由修改和分发。

1.安装教程

1.首先第一步配置网络源(需要扩展包)

我之前写过配置源的文章:
配置方法icon-default.png?t=N7T8http://t.csdnimg.cn/uQI7c

[root@localhost ~]# yum install -y ansible

安装完成之后查看是否成功

rpm -ql ansible	列出他的所有相关文件

rpm -qc ansible	列出配置文件

ansible-doc -l	 查看它的所有模块

安装完成之后我们来做一个小测试带大家理解ansible

2实验

以下实验环境

3台Centos7

1台用于部署ansible服务器

2台用来被控制(其中一台免密登录,一台需用账户和密码登录)

主机名映射

[root@ansible ~]# vim /etc/hosts

1.设置ssh-key

SSH密钥(Secure Shell key)是SSH(Secure Shell)协议中用于身份验证的凭证。与传统的基于密码的身份验证相比,它提供了一种更安全的方式连接到远程服务器。

[root@localhost ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
47:b6:e3:55:27:5c:8f:93:03:be:fc:87:28:a8:6d:cc root@localhost.localdomain
The key's randomart image is:
+--[ RSA 2048]----+
|            .   .|
|           . o +.|
|          o . O o|
|         o o o = |
|        S + +    |
|         + o o . |
|       o. o . o .|
|       oE  .   . |
|      ...        |
+-----------------+

查看是否成功

[root@localhost ~]# ls .ssh/
id_rsa  id_rsa.pub
[root@localhost ~]# ssh-copy-id 192.168.93.112
The authenticity of host '192.168.93.112 (192.168.93.112)' can't be established.
ECDSA key fingerprint is e8:64:5f:06:f8:8c:63:6d:c9:eb:73:7d:78:d5:93:2b.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed

/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.93.112's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh '192.168.93.112'"
and check to make sure that only the key(s) you wanted were added.

 ssh-copy-id 192.168.93.112

尝试在本地计算机和 IP 地址为 192.168.93.112 的服务器之间设置基于 SSH 密钥的身份验证。这样您就无需在每次使用 SSH 连接到服务器时输入密码。

2.定义主机清单
[root@localhost ~]# vim /etc/ansible/hosts 

在配置文件的最后一行加入如下配置

3.测试连通性
免密登录

ping的结果显示绿色就是成功的

[root@localhost ~]# ansible localhost -m ping	对本机进行测试
localhost | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
[root@localhost ~]# ansible host1 -m ping		对host1进行测试

The authenticity of host 'host1 (192.168.93.112)' can't be established.
ECDSA key fingerprint is e8:64:5f:06:f8:8c:63:6d:c9:eb:73:7d:78:d5:93:2b.
Are you sure you want to continue connecting (yes/no)? yes
host1 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },    
    "changed": false, 
    "ping": "pong"

简洁化显示

[root@localhost ~]# ansible host1 -m ping -o
host1 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}
  • ansible :这是 Ansible 命令行工具。
  • host1 :指定要 ping 的目标计算机的主机名或 IP 地址。
  • -m ping :此选项告诉 Ansible 使用 ping 模块,该模块尝试 ping 目标主机。
  • -o选项简化输出
用户名密码登录
[root@localhost ~]# ansible host2 -m ping -o -u root -k
  • host2 :这是 Ansible 将定位的主机或主机组的名称。在本例中,它是一个名为 host2 的主机。
  • -m ping :这指定您要使用 ping 模块。 ping 模块通常用作测试主机连接的简单方法。
  • -o :此标志告诉 Ansible 仅运行 playbook 一次。它对于 ping 模块不是必需的,但在其他上下文中可能很有用。
  • -u root :指定连接到目标主机时要使用的远程用户。在本例中,它是 root
  • -k :此标志告诉 Ansible 提示输入 SSH 密码。如果您尚未设置 SSH 密钥以进行无密码身份验证,这会非常有用。

出现报错的情况下

host2 | FAILED! => {
    "msg": "Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this.  Please add this host's fingerprint to your known_hosts file to manage this host."
}

解决办法

这个时候需要登录一次 再使用上边的命令才可以成功(因为你的密码自动输出给yes/no的选项中)

[root@localhost ~]# ansible host2 -m ping 
The authenticity of host 'host2 (192.168.93.113)' can't be established.
ECDSA key fingerprint is e8:64:5f:06:f8:8c:63:6d:c9:eb:73:7d:78:d5:93:2b.
Are you sure you want to continue connecting (yes/no)? yes
host2 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}

一并输出

[root@localhost ~]# ansible all -m ping -o

all :这是 Ansible 中的特殊关键字,指您库存中的所有主机。

这边报错正常的因为 host2没有设置免密登录需要账号密码来登录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1617407.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

控制台居然可以这么玩?五分钟带你上手ANSI指令,实现一个log工具包

目录 前言 基础知识 进阶实践 ANSI参数 ANSI类 JSLog类 工具的使用说明 配置相关 全局配置项 默认配置 基本用法 打印字符 添加全局配置项 清空所有样式及操作行为 校验传入的参数是否正确 样式控制 Node环境 浏览器中 光标控制指令 光标位置偏移 滚动条控…

Pytorch:张量的梯度计算

目录 一、自动微分简单介绍1、基本原理2、梯度计算过程3、示例:基于 PyTorch 的自动微分a.示例详解b.梯度计算过程c.可视化计算图 4、总结 二、为什么要计算损失,为何权重更新是对的?1、梯度下降数学原理2、梯度上升 三、在模型中使用自动微分…

力扣HOT100 - 199. 二叉树的右视图

解题思路&#xff1a; 相当于层序遍历&#xff0c;然后取每一层的最后一个节点。 class Solution {public List<Integer> rightSideView(TreeNode root) {if (root null) return new ArrayList<Integer>();Queue<TreeNode> queue new LinkedList<>…

element中file-upload组件的提示‘按delete键可删除’,怎么去掉?

问题描述 element中file-upload组件会出现这种提示‘按delete键可删除’ 解决方案&#xff1a; 这是因为使用file-upload组件时自带的提示会盖住上传的文件名&#xff0c;修改一下自带的样式即可 ::v-deep .el-upload-list__item.is-success.focusing .el-icon-close-tip {d…

vue 关键字变红

1.html <div v-html"replaceKeywordColor(item.title)" ></div> 2.js //value为搜索框内绑定的值 replaceKeywordColor(val) {if (val?.includes(this.value) && this.value ! ) {return val.replace(this.value,<font color"red&…

PyCharm 中的特殊标记

再使用 PyCharm 开发 Python 项目的时候&#xff0c;经常会有一些特殊的标记&#xff0c;有些是编辑器提示的代码规范&#xff0c;有些则为了方便查找而自定义的标记。 我在之前写过一些关于异常捕获的文章&#xff1a;Python3 PyCharm 捕获异常报 Too broad exception clause…

【电控笔记5.8】数字滤波器设计流程频域特性

数字滤波器设计流程&频域特性 2HZ : w=2pi2=12.56 wc=2*pi*5; Ts=0.001; tf_lpf =

块存储、文件存储、对象存储概念与区别

1. 块存储 块存储是将数据切分成固定大小的块&#xff0c;然后将这些块存储在物理设备&#xff08;如硬盘、固态硬盘&#xff09;上。每个块都有唯一的标识符&#xff0c;并且可以独立地被读取、写入或删除。块存储通常用于存储文件系统&#xff0c;例如操作系统的文件系统&am…

牛客周赛 Round 40(A,B,C,D,E,F)

比赛链接 官方讲解 这场简单&#xff0c;没考什么算法&#xff0c;感觉有点水。D是个分组01背包&#xff0c;01背包的一点小拓展&#xff0c;没写过的可以看看&#xff0c;这个分类以及这个题目本身都是很板的。E感觉就是排名放高了导致没人敢写&#xff0c;本质上是个找规律…

群辉安装python3教程

目录 群辉安装python3一、需求二、群辉套件安装python3三、ssh连接群辉&#xff08;一&#xff09;finshell连接群辉&#xff0c;root登录&#xff08;二&#xff09;安装pip3库&#xff08;三&#xff09;配置环境变量 四、测试 群辉安装python3 一、需求 需求&#xff1a;语…

【目标检测】YOLO系列-YOLOv1 理论基础 通俗易懂

为方便大家理解YOLO的原理&#xff0c;这里将YOLOv1的部分内容基础内容进行用比较直白的话和例子进行阐述&#xff0c;为后续大家学习YOLO作为铺垫。 1、模型所干的活 工作中&#xff0c;大家经常将 Word 文档 上传到某转换器&#xff0c;然后转换输出为PDF文档。目标检测中我…

认识rust中闻风丧胆生的命周期,不用过于担心,它对于所有人都是平等的

生命周期&#xff0c;简而言之就是引用的有效作用域。在大多数时候&#xff0c;我们无需手动的声明生命周期&#xff0c;因为编译器可以自动进行推导&#xff0c;用类型来类比下&#xff1a; 就像编译器大部分时候可以自动推导类型 <-> 一样&#xff0c;编译器大多数时候…

Rust Tracing 入门

Tracing 是一个强大的工具&#xff0c;开发人员可以使用它来了解代码的行为、识别性能瓶颈和调试问题。 Rust 是一种以其性能和安全保证而闻名的语言&#xff0c;在它的世界中&#xff0c;跟踪在确保应用程序平稳高效运行方面发挥着至关重要的作用。 在本文中探讨Tracing 的概…

4K Video Downloader v4.30.0.5644 一款专业级的4K视频下载器

4K Video Downloader 中文破姐版 本站所有素材均来自于互联网&#xff0c;版权属原著所有&#xff0c;如有需要请购买正版。如有侵权&#xff0c;请联系我们立即删除。

Multiscale Vision Transformers

1、引言 论文链接&#xff1a;https://arxiv.org/abs/2104.11227 Haoqi Fan[1] 等通过在 ViT[2] 中引入多尺度特征层次结构&#xff0c;提出了一种用于视频和图像识别的 Multiscale Vision Transformers(MViT)[1]。在视频识别任务中&#xff0c;它优于依赖大规模外部预训练的视…

react 基础学习笔记一

1、jsx语法过程 jsx使用react构造组件&#xff0c;通过bable进行编译成js对象&#xff0c;在用ReactDom.render()渲染成DOM元素&#xff0c;最后再插入页面的过程。 2、创建组件 组件的定义&#xff1a;将公用的代码组装成一个独立的文件&#xff0c;保持代码独立性&#xff0…

【QT学习】9.绘图,三种贴图,贴图的转换

一。绘图的解释 Qt 中提供了强大的 2D 绘图系统&#xff0c;可以使用相同的 API 在屏幕和绘图设备上进行绘制&#xff0c;它主要基于QPainter、QPaintDevice 和 QPaintEngine 这三个类。 QPainter 用于执行绘图操作&#xff0c;其提供的 API 在 GUI 或 QImage、QOpenGLPaintDev…

使用VPN后,浏览器访问不了国内地址解决办法

winR输入regedit 打开注册表 找到路径 计算机\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings删除两个proxy代理

【Android】 四大组件详解之广播接收器、内容提供器

目录 前言广播机制简介系统广播动态注册实现监听网络变化静态注册实现开机自启动 自定义广播发送标准广播发送有序广播 本地广播 内容提供器简介运行时权限访问其他程序中的数据ContentResolver的基本用法读取系统联系人 创建自己的内容提供器创建内容提供器的步骤 跨程序数据共…

JavaSE:抽象

一&#xff0c;抽象是什么&#xff0c;抽象和面向对象有什么关系 抽象&#xff0c;个人理解&#xff0c;就是抽象的意思 我们都知道面向对象的四大特征&#xff1a;封装&#xff0c;继承&#xff0c;多态&#xff0c;抽象 为什么抽象是面向对象的特征之一&#xff0c;抽象和面…