Ansible自动化运维工具安装和基本使用

简介: Ansible 是一款无代理的IT自动化工具,通过SSH连接目标主机执行配置管理、应用部署和云端管理任务。它使用YAML编写的Playbook定义任务,核心组件包括Playbook、模块、主机清单、变量等。Ansible的优势在于易用、功能强大、无须在目标主机安装额外软件,并且开源。安装过程涉及配置网络源、yum安装和SSH密钥设置。通过定义主机清单和使用模块进行通信测试,确保连接成功。

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

什么是无代理模式?

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

Ansible 的工作原理
可以概括为以下几个步骤:

  • 解析 Playbook:Ansible 首先会解析 Playbook 文件,其中定义了要执行的任务列表。Playbook 使用 YAML 编写,YAML 是一种易于阅读和编写的语言。
  • 建立连接:Ansible 会使用 SSH 连接到目标主机。连接信息在主机清单中定义,主机清单是一个 YAML 文件,其中包含了主机及其相关信息。
  • 执行任务:Ansible 会根据 Playbook 中的任务列表逐个执行任务。每个任务都使用 Ansible 模块来完成,Ansible 模块是用于执行特定任务的代码块。
  • 处理结果: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.首先第一步配置网络源(需要扩展包)

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

image.png

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

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

rpm -qc ansible    列出配置文件

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

2实验

以下实验环境

3台Centos7

1台用于部署ansible服务器

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

主机名映射

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

image.png

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  .   . |
|      ...        |
+-----------------+

image.png

查看是否成功

[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

image.png

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"

image.png

简洁化显示
[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 密钥以进行无密码身份验证,这会非常有用。

出错的情况

image.png

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 中的特殊关键字,指您库存中的所有主机。

相关文章
|
11月前
|
运维 Prometheus 监控
3 年部署经验总结:用自动化工具轻松管理 300+ 服务器开源软件
三年前接手公司IT部门时,我满怀信心,却发现部署效率低下。尽管使用了GitLab、Jenkins、Zabbix等100+开源工具,部署仍耗时费力。文档厚重如百科,却难解实际困境。一次凌晨三点的加班让我下定决心改变现状。偶然看到一篇国外博客,介绍了自动化部署的高效方式,我深受启发。
393 0
|
10月前
|
机器学习/深度学习 人工智能 测试技术
EdgeMark:嵌入式人工智能工具的自动化与基准测试系统——论文阅读
EdgeMark是一个面向嵌入式AI的自动化部署与基准测试系统,支持TensorFlow Lite Micro、Edge Impulse等主流工具,通过模块化架构实现模型生成、优化、转换与部署全流程自动化,并提供跨平台性能对比,助力开发者在资源受限设备上高效选择与部署AI模型。
807 9
EdgeMark:嵌入式人工智能工具的自动化与基准测试系统——论文阅读
|
9月前
|
人工智能 搜索推荐 UED
一个牛逼的国产AI自动化工具,开源了 !
AiPy是国产开源AI工具,结合大语言模型与Python,支持本地部署。用户只需用自然语言描述需求,即可自动生成并执行代码,轻松实现数据分析、清洗、可视化等任务,零基础也能玩转编程,被誉为程序员的智能助手。
|
11月前
|
人工智能 数据可视化 数据挖掘
团队日报不用愁!自动化生成工具亲测:任务进度实时同步
本文深入分析了传统手动日报在数据孤岛、格式混乱和时效性差三大痛点,并探讨了自动化日报带来的效率提升、决策优化等四大核心价值。通过对板栗看板、SmartBrief、n8n 等六款主流工具的功能、适用场景及实战效果进行测评,为企业提供科学的选型建议与实施路径。
团队日报不用愁!自动化生成工具亲测:任务进度实时同步
|
10月前
|
Java 测试技术 API
自动化测试工具集成及实践
自动化测试用例的覆盖度及关键点最佳实践、自动化测试工具、集成方法、自动化脚本编写等(兼容多语言(Java、Python、Go、C++、C#等)、多框架(Spring、React、Vue等))
763 6
|
11月前
|
人工智能 供应链 数据可视化
工作流梳理工具实战教程:手把手教你绘制第一张自动化流程图
本文剖析了团队因流程混乱导致重复劳动和效率低下的问题,提出通过工作流梳理提升协作效率的解决方案。总结了流程梳理的六大核心需求,并深度测评了6款主流工具,国内有板栗看板那,国外有kiss flow结合团队规模与需求提供选型建议,助力企业高效落地流程优化。
|
9月前
|
人工智能 缓存 自然语言处理
86_自动化提示:AutoPrompt工具
在当今人工智能领域,提示工程(Prompt Engineering)已成为释放大语言模型(LLM)潜能的关键技术。随着LLM规模和能力的不断增长,如何设计高效、精确的提示词成为研究和应用的焦点。然而,传统的手工提示工程面临着巨大挑战
656 0
|
10月前
|
安全 搜索推荐 机器人
风险规则引擎-RPA 作为自动化依赖业务决策流程的强大工具
机器人流程自动化(RPA)是一种通过软件“机器人”自动执行重复性任务的技术,能大幅提升工作效率。它适用于财务、电商等领域的标准化流程,如账单处理和退货管理。然而,RPA在复杂决策场景中存在局限,需结合决策模型(DMN)和业务规则管理系统(BRMS)实现流程与决策的协同自动化,从而增强灵活性与业务价值。
|
11月前
|
数据采集 运维 监控
|
数据采集 人工智能 机器人
RPA与爬虫:自动化工具的本质差异与选择指南
本文深入解析RPA与爬虫的本质差异,帮助企业根据业务需求明智选型。RPA侧重内部流程自动化,爬虫专注外部数据采集。内容涵盖技术原理、应用场景、优劣势对比及主流RPA工具介绍,助力把握自动化趋势,提升效率。
2409 0