如何在 Rocky Linux 9 上安装 Ansible
Ansible 是一个用于配置和管理计算机的开源软件平台。它结合了多节点软件部署、临时任务执行和配置管理。 Ansible 通过 SSH 工作,不需要在远程节点上安装任何软件或守护程序。扩展模块可以用任何语言编写; Node.js 是目前最流行的选择。
Ansible 将系统状态建模为一系列有关设备所需状态的断言,由名称、IP 地址、端口号等变量定义。然后程序执行有关系统的“事实”(例如存在哪些用户帐户) ) 评估该状态是否为真;如果不正确,则必须采取措施更改系统的实际状态以匹配其模型的状态。
Ansible 于 2012 年开始作为 Puppet 和 Chef 以及配置管理领域其他工具的开源替代品。它是由 Michael DeHaan 开发的,他是 Rackspace 内部基础设施云的配置基础设施的创建者,后来红帽在 OpenStack 下收购了该云。他说,他创建 Ansible 是出于对现有工具的失望,因为它们太“笨重”。他没有重新发明“ping”或“ls”等常见的 shell 命令,而是编写了一些小模块,这些模块可以组合起来执行有用的任务,而无需了解它们的内部工作原理。例如,在编写管理MySQL数据库的模块时,他不必实施安全最佳实践;相反,它包含在 Ansible 附带的默认模块库中。
使用 Ansible 的好处之一是它可以管理异构基础设施。例如,您的组织可能同时拥有 Linux 和 Windows 服务器。 Ansible 可以管理这两个系统,无需单独的配置文件或管理工具。
本教程将教您如何在 Rocky Linux 9 上安装和配置 Ansible,以实现网络自动化、配置和配置管理。我们还将使用一个基本的工作示例来演示如何在实践中使用 Ansible。
先决条件
要学习本教程,您将需要以下内容:
- 运行 Rocky Linux 9 的计算机
- Root 权限或 sudo 访问计算机
- 您的计算机上安装了 Ansible 2.0 或更高版本
- OpenSSH 服务器在端口 22 上运行并接受连接
更新您的 Rocky Linux 9 系统
保持系统更新总是一个好主意。要更新 Rocky Linux 8,请运行以下命令。这些命令将检查您的系统是否有任何可用更新,并且 sudo dnf update 将安装它们。
sudo dnf check-update
sudo dnf update -y
更新过程可能需要几分钟时间,具体取决于您的互联网连接速度和服务器负载,因此请耐心等待。
接下来,运行以下命令来安装系统的 Extra Packages for Enterprise Linux (EPEL) 存储库。安装后,您将需要再次更新,因为 EPEL 引入了自己的软件包版本和编号,可能与官方 Rocky 存储库的版本和编号不匹配。
sudo dnf install epel-release && sudo dnf update -y
在 Rocky Linux 上安装 Ansible
现在您已启用 EPEL 存储库,您可以在系统上安装 Ansible。我们将使用下面的命令来安装 Ansible 的当前稳定版本。
sudo dnf install ansible -y
运行以下命令来验证 Ansible 是否已正确安装。此命令将打印 Ansible 版本号。
ansible --version
示例输出:
在目标服务器上配置 SSH
在您将 SSH 配置为接受来自计算机的连接之前,您的目标服务器尚未准备好使用 Ansible。我们将使用 ssh-keygen 实用程序在您的计算机上创建公钥/私钥对。私钥将存储在您的计算机上,公钥将复制到目标服务器。
本示例将使用 Ubuntu 22.04 LTS 作为目标服务器,但您可以替换为您自己的目标服务器。如果您的目标服务器是不同的操作系统,则必须相应地调整命令。
首先,运行以下命令在目标服务器上安装 OpenSSH 服务器。
sudo apt install openssh-server -y
接下来,运行以下命令来启用 ssh 服务。
sudo systemctl enable ssh
最后,运行以下命令打开端口 22,以便 ansible 可以连接。
sudo ufw allow 22
配置您的本地计算机以与目标服务器配合使用
现在 SSH 已启用,您需要在本地计算机(Rocky Linux)上生成密钥对。运行以下命令来执行此操作。 ssh-keygen 是一个生成一对加密密钥(一个公共密钥和一个私有密钥)的程序。这些密钥用于在通过 SSH 连接时识别计算机。
ssh-keygen
运行命令后,系统会询问您几个问题。提供的默认答案足以满足我们的目的,因此您可以按 Enter 键直到生成密钥。
现在,您需要将公钥复制到目标服务器。您可以使用 ssh-copy-id 命令来执行此操作,大多数 Linux 发行版默认包含该命令。您需要指定在远程服务器上使用的用户帐户(root)、远程主机名或远程 IP 地址(11.22.33)。
cd ~/.ssh
ssh-copy-id [email
出现提示时提供目标服务器上的用户帐户的密码,公钥将被复制到您的目标服务器。
配置本地计算机的主机文件
ssh 命令提供的一个非常有用的工具是能够对多个服务器使用单个 SSH 密钥对。 Ansible 将查看本地计算机的 /etc/hosts 文件,并在 playbook 运行期间遇到主机名时尝试解析其中列出的 IP 地址。由于我们之前将公钥复制到了目标服务器,因此我们会将 11.22.33 地址添加到本地计算机的 /etc/hosts 文件中,以便 Ansible 可以正确解析它。
sudo nano /etc/ansible/hosts
您将把 11.22.33 添加到网络服务器主机组的底部。请记住将 11.22.33 替换为您的实际 IP 地址。
Ansible 中的组只是应该以类似方式对待的主机列表。
例如,webservers 是一组运行相同 Web 应用程序的主机,db-servers 是一组运行相同数据库应用程序的主机。
假设您有多个不同的服务器,它们都将运行类似的剧本。在这种情况下,您可能会考虑将它们全部放入一个主机组中,以便这些系统上运行的每个剧本都可以利用整个组共享的任何变量或其他功能。
完成后保存并关闭文件。
测试您的配置
现在,我们可以通过对目标服务器使用 ping 模块来测试 Ansible 是否在本地计算机上正确配置。这将检查配置文件中是否有任何语法错误会阻止 ansible 连接到目标服务器。
ansible -m ping webservers
如果一切配置正确,ansible 将返回主机组中所有主机的列表及其相应的 ping 状态。
输出应如下所示:
SUCCESS 表示该命令已在远程服务器上成功运行。此输出会有所不同,具体取决于 ansible 是否可以联系目标服务器,以及您传递给 ping 的参数(例如 -m ping)。
“ansible_facts ”: { 表示 ansible 能够收集有关远程服务器的事实。
“discovered_interpreter_python ”: “/usr/bin/python3 ” 表示 ansible 发现远程目标服务器上可用的解释器,在本例中为 /usr/bin/python3。假设运行 ping 模块后没有看到任何输出。在这种情况下,您的主机文件中可能存在拼写错误或配置中存在其他一些错误,导致 ansible 无法连接到目标服务器。
“changed ”: false 表示由于运行此特定模块,远程服务器上没有进行任何更改。
“ping ”: “pong ”按预期返回 pong。如果一切配置正确并且 ansible 可以成功到达目标服务器,您应该看到以下响应。
结论
在本文中,我们在本地 Rocky Linux 9 计算机上安装了 Ansible,并将其配置为连接到远程服务器。然后使用 Ansible 对远程服务器执行 ping 操作,以确保所有内容都配置正确。
现在您已经安装并配置了 ansible,您可以使用它来管理远程服务器。
有关使用 Ansible 的更多信息,请参阅其官方 Ansible 文档。