如何在 Ubuntu 14.04 上安装和配置 Ansible如何在 Ubuntu 14.04 上安装和配置 Ansible如何在 Ubuntu 14.04 上安装和配置 Ansible如何在 Ubuntu 14.04 上安装和配置 Ansible
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何在 Ubuntu 14.04 上安装和配置 Ansible

介绍

配置管理系统旨在使管理员和运营团队能够轻松控制大量服务器。它们允许您从一个中央位置以自动化方式控制许多不同的系统。

虽然有许多适用于 Linux 系统的流行配置管理系统,例如 Chef 和 Puppet,但这些系统通常比许多人想要或需要的要复杂。 Ansible 是这些选项的一个很好的替代方案,因为它的入门开销要小得多。

在本指南中,我们将讨论如何在 Ubuntu 14.04 机器上安装 Ansible,并复习一些有关如何使用该软件的基础知识。

Ansible 是如何工作的?

Ansible 的工作原理是从一台安装和配置了 Ansible 组件的计算机上配置客户端机器。

它通过普通的 SSH 通道进行通信,以便从远程机器检索信息、发出命令和复制文件。因此,Ansible 系统不需要在客户端计算机上安装任何额外的软件。

这是 Ansible 简化服务器管理的一种方式。任何公开了 SSH 端口的服务器都可以置于 Ansible 的配置保护之下,无论它处于生命周期的哪个阶段。

您可以通过 SSH 管理的任何计算机,也可以通过 Ansible 进行管理。

Ansible 采用模块化方法,可以轻松扩展以使用主系统的功能来处理特定场景。模块可以用任何语言编写,并以标准 JSON 进行通信。

配置文件主要以 YAML 数据序列化格式编写,因为它具有表达性以及与流行标记语言的相似性。 Ansible 可以通过命令行工具或通过其称为 Playbook 的配置脚本与客户端交互。

在 Ubuntu 14.04 上安装 Ansible

要开始探索 Ansible 作为管理我们各种服务器的一种方式,我们需要在至少一台机器上安装 Ansible 软件。我们将在本节中使用 Ubuntu 14.04 VPS 实例。

获取适用于 Ubuntu 的 Ansible 的最佳方法是将项目的 PPA(个人包存档)添加到您的系统中。

为了有效地做到这一点,我们需要安装 software-properties-common 包,这将使我们能够轻松地使用 PPA。 (此软件包在旧版本的 Ubuntu 上称为 python-software-properties。)

  1. sudo apt-get update
  2. sudo apt-get install software-properties-common

安装包后,我们可以通过键入以下命令来添加 Ansible PPA:

  1. sudo apt-add-repository ppa:ansible/ansible

按 ENTER 接受 PPA 添加。

接下来,我们需要刷新系统的包索引,以便它知道 PPA 中可用的包。之后,我们就可以安装软件了:

  1. sudo apt-get update
  2. sudo apt-get install ansible

我们现在拥有通过 Ansible 管理我们的服务器所需的所有软件。

设置 SSH 密钥

正如我们上面提到的,Ansible 主要通过 SSH 与客户端计算机通信。虽然它当然有能力处理基于密码的 SSH 身份验证,但 SSH 密钥有助于使事情变得简单。

我们可以通过两种不同的方式设置 SSH 密钥,具体取决于您是否已经拥有要使用的密钥。我们假设您要管理的服务器是 DigitalOcean droplet。

创建新的 SSH 密钥对

如果您还没有要用于 Ansible 管理的 SSH 密钥对,我们现在可以在您的 Ansible VPS 上创建一个。

我们将在我们的 Ansible Droplet 上创建一个 SSH 密钥对,以向它将管理的主机进行身份验证。

作为您将控制 Ansible 的用户,通过键入以下内容创建一个 RSA 密钥对:

  1. ssh-keygen

系统将要求您指定创建的密钥对的文件位置、密码和密码确认。通过所有这些按 ENTER 接受默认值。

您的新密钥在用户的 ~/.ssh 目录中可用。公钥(您可以共享的)称为 id_rsa.pub。私钥(您妥善保管的那个)称为 id_rsa。

您可以将它们添加到您的 DigitalOcean 控制面板,以允许您将 SSH 密钥嵌入到新创建的 droplet 中。这将允许您的 Ansible Droplet 立即通过 SSH 连接到您的新 Droplet,而无需任何其他身份验证。

为此,请单击左侧导航菜单中的“SSH 密钥”链接。在新屏幕中,单击右上角的“添加 SSH 密钥”按钮:

在顶部字段中输入您想要与此密钥相关联的名称。在您的 Ansible VPS 实例上,键入以下内容以获取公钥的内容:

  1. cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDzmGgsqjSFuOBbjZB1sgquKpp3Ty+FgqoLrzjKbbk9VGOH6kM37aAhyxxmTQfe69lhYi/WCai+mrXOyY9IiQbUfZ4jsfPE9DS3zHhmnGiBWA7pedCTJ/Nhf06dmhAJIbExW3uDghbPbzbSA5Ihn1x0F5FXtSMDoFtyjcwUwJxc2z/kk9TKcFSl8qqf4IYBYE7c+EKaYRBjjDP4AQmiwjTPuipsmub7C0OGF0dTMatIa0lok6rwy91nmhCQV6polG0+Fsk4YrY8Yh5xz6wE0lOvc8BwP9nL0zsnw6Ey0MHV9BbMqtyD6x/fCurpIkMHJK4nv79rToSWA0AwoP/bJXh7 demo@ansible0

返回给您的字符串是您需要粘贴到 DigitalOcean 控制面板的第二个字段中的内容:

单击“创建 SSH 密钥”将您的密钥添加到控制面板。现在,每当您创建一个新的 Droplet 时,您都可以将您的公共 SSH 密钥嵌入到新服务器中,从而允许您与您的 Ansible 实例进行通信。您只需要在 Droplet 创建过程的“添加可选的 SSH 密钥”部分中选择密钥:

将现有的 SSH 密钥对传输到 Ansible

如果您已经拥有一个 SSH 密钥对,用于通过您的 Droplet 进行身份验证,您可以将凭据传输到新的 Ansible Droplet,而不是创建新的一对。这样做的好处是可以自动与您已配置为使用该密钥的任何服务器一起工作。

在为 Droplet 配置 SSH 密钥身份验证的计算机上,通过键入以下内容获取公钥:

  1. cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDzmGgsqjSFuOBbjZB1sgquKpp3Ty+FgqoLrzjKbbk9VGOH6kM37aAhyxxmTQfe69lhYi/WCai+mrXOyY9IiQbUfZ4jsfPE9DS3zHhmnGiBWA7pedCTJ/Nhf06dmhAJIbExW3uDghbPbzbSA5Ihn1x0F5FXtSMDoFtyjcwUwJxc2z/kk9TKcFSl8qqf4IYBYE7c+EKaYRBjjDP4AQmiwjTPuipsmub7C0OGF0dTMatIa0lok6rwy91nmhCQV6polG0+Fsk4YrY8Yh5xz6wE0lOvc8BwP9nL0zsnw6Ey0MHV9BbMqtyD6x/fCurpIkMHJK4nv79rToSWA0AwoP/bJXh7 demo@ansible0

在您的 Ansible 服务器上,您需要创建一个隐藏目录来存储您的密钥。将其命名为 .ssh 以便 SSH 程序知道在哪里可以找到它:

  1. mkdir ~/.ssh

我们应该锁定对该目录的访问权限,以便只有您可以进入或写入它:

  1. chmod 700 ~/.ssh

现在,进入目录并在文本编辑器中打开名为 id_rsa.pub 的文件:

  1. cd ~/.ssh
  2. nano id_rsa.pub

将您家用计算机的公钥输出粘贴到此文件中:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDzmGgsqjSFuOBbjZB1sgquKpp3Ty+FgqoLrzjKbbk9VGOH6kM37aAhyxxmTQfe69lhYi/WCai+mrXOyY9IiQbUfZ4jsfPE9DS3zHhmnGiBWA7pedCTJ/Nhf06dmhAJIbExW3uDghbPbzbSA5Ihn1x0F5FXtSMDoFtyjcwUwJxc2z/kk9TKcFSl8qqf4IYBYE7c+EKaYRBjjDP4AQmiwjTPuipsmub7C0OGF0dTMatIa0lok6rwy91nmhCQV6polG0+Fsk4YrY8Yh5xz6wE0lOvc8BwP9nL0zsnw6Ey0MHV9BbMqtyD6x/fCurpIkMHJK4nv79rToSWA0AwoP/bJXh7 demo@ansible0

保存并关闭文件。我们将通过键入以下内容来确保此文件具有正确的权限:

  1. chmod 644 id_rsa.pub

现在,返回配置为 SSH 密钥访问的本地计算机,键入:

  1. cat ~/.ssh/id_rsa
-----BEGIN RSA PRIVATE KEY-----
MIIEpgIBAAKCAQEA85hoLKo0hbjgW42QdbIKriqad08vhYKqC684ym25PVRjh+pD
N+2gIcl8Zk0H3uvZYWIv1gmsfpq1zsmPSIkG1H2eI7HzxPQ0qMx4ZpxogVgO6XnQ
kyfzYX9OnZoQCSGxMVt7g4IWz2820gOSIZ9cdBeRV7UjA6Bbco3MFMCcXNs/5JPU
ynBUpfKqn+CGAWBO3PhCmmEQY4wz+AEJosI0z7oqbJrm/AtDhhdHUzGrSGtJaJOq
. . .
. . .
cqsqOEzXAoGBAPMJJ8RrKUBuSjVNkzebst9sBgNadmaoQUoMHUDr8KpCZhWAoHB7
1VKmq7VSphQSruI31qy2M88Uue1knC/nQr1bE1DITZgezETSsDqsAMBo8bqDN6TT
qVJgG+TS9BRC+IowuzMVV5mzrfJjkrb+GG+xWSXrTLZMbeeTf+D0SfVo
-----END RSA PRIVATE KEY-----

输出会很长。

回到您的 Ansible Droplet,我们需要在 ~/.ssh 目录中创建一个新文件:

  1. nano id_rsa

在里面,将上一个命令的结果粘贴到本地计算机上:

-----BEGIN RSA PRIVATE KEY-----
MIIEpgIBAAKCAQEA85hoLKo0hbjgW42QdbIKriqad08vhYKqC684ym25PVRjh+pD
N+2gIcl8Zk0H3uvZYWIv1gmsfpq1zsmPSIkG1H2eI7HzxPQ0qMx4ZpxogVgO6XnQ
kyfzYX9OnZoQCSGxMVt7g4IWz2820gOSIZ9cdBeRV7UjA6Bbco3MFMCcXNs/5JPU
ynBUpfKqn+CGAWBO3PhCmmEQY4wz+AEJosI0z7oqbJrm/AtDhhdHUzGrSGtJaJOq
. . .
. . .
cqsqOEzXAoGBAPMJJ8RrKUBuSjVNkzebst9sBgNadmaoQUoMHUDr8KpCZhWAoHB7
1VKmq7VSphQSruI31qy2M88Uue1knC/nQr1bE1DITZgezETSsDqsAMBo8bqDN6TT
qVJgG+TS9BRC+IowuzMVV5mzrfJjkrb+GG+xWSXrTLZMbeeTf+D0SfVo
-----END RSA PRIVATE KEY-----

确保包含第一条和最后一条标记线。为了使密钥文件有效,它们是必需的。保存并关闭文件。

我们需要更改权限以确保此文件的安全:

  1. chmod 600 id_rsa

此时,Ansible 将能够使用这些 SSH 密钥与嵌入密钥的任何服务器进行通信。

配置 Ansible 主机

Ansible 通过一个“主机”文件跟踪它知道的所有服务器。我们需要先设置这个文件,然后才能开始与我们的其他计算机通信。

使用 root 权限打开文件,如下所示:

  1. sudo nano /etc/ansible/hosts

您将看到一个包含大量示例配置的文件,但由于这些主机是虚构的,所以这些配置实际上对我们都不起作用。因此,首先,让我们通过在每行前添加 \# 来注释掉该文件中的所有行。

如果我们以后要实现更复杂的场景,我们会将这些示例保存在文件中,以帮助我们进行配置。

一旦所有的行都被注释掉,我们就可以开始添加我们的实际主机了。

主机文件相当灵活,可以通过几种不同的方式进行配置。我们将要使用的语法看起来像这样:

[group_name]
alias ansible_ssh_host=your_server_ip

group_name 是一个组织标记,可让您用一个词来指代其下列出的任何服务器。别名只是引用该服务器的名称。

所以在我们的场景中,我们假设我们有三台服务器,我们将使用 Ansible 来控制它们。可以通过键入以下内容从 Ansible Droplet 访问这些服务器:

  1. ssh root@your_server_ip

如果您设置正确,则不应提示您输入密码。我们假设我们的水滴的 IP 地址是 192.0.2.1、192.0.2.2 和 192.0.2.3。我们将对其进行设置,以便我们可以将它们单独称为 host1、host2 和 host3,或作为一个组称为 水滴。

这是我们应该添加到主机文件中以完成此操作的块:

[droplets]
host1 ansible_ssh_host=192.0.2.1
host2 ansible_ssh_host=192.0.2.2
host3 ansible_ssh_host=192.0.2.3

主机可以在多个组中,并且组可以为其所有成员配置参数。让我们现在试试这个。

使用我们当前的设置,如果我们尝试使用 Ansible 连接到这些主机中的任何一个,该命令将失败(假设您不是以 root 用户身份操作)。这是因为您的 SSH 密钥是为远程系统上的根用户嵌入的,并且 Ansible 默认情况下会尝试以您当前的用户身份进行连接。连接尝试将出现此错误:

host1 | FAILED => SSH encountered an unknown error during the connection. We recommend you re-run the command using -vvvv, which will enable SSH debugging output to help diagnose the issue

在我的 Ansible 计算机上,我正在使用一个名为 demo 的用户。 Ansible 将尝试使用 ssh demo@server 连接到每个主机。如果演示用户不在远程系统上,这将不起作用。

我们可以创建一个文件,告诉 \droplets 组中的所有服务器使用 root 用户进行连接。

为此,我们将在 Ansible 配置结构中创建一个名为 group_vars 的目录。在此文件夹中,我们可以为每个要配置的组创建 YAML 格式的文件:

  1. sudo mkdir /etc/ansible/group_vars
  2. sudo nano /etc/ansible/group_vars/droplets

我们可以把我们的配置放在这里。 YAML 文件以 \— 开头,因此请确保不要忘记该部分。

---
ansible_ssh_user: root

完成后保存并关闭此文件。

如果您想为每个服务器指定配置详细信息,而不考虑组关联,您可以将这些详细信息放在 /etc/ansible/group_vars/all 的文件中。可以通过在 /etc/ansible/host_vars 目录下创建文件来配置单个主机。

使用简单的 Ansible 命令

现在我们已经设置了主机和足够的配置详细信息以允许我们成功连接到我们的主机,我们可以尝试我们的第一个命令。

通过键入以下命令 Ping 您配置的所有服务器:

  1. ansible -m ping all
host1 | success >> {
    "changed": false,
    "ping": "pong"
}

host3 | success >> {
    "changed": false,
    "ping": "pong"
}

host2 | success >> {
    "changed": false,
    "ping": "pong"
}

这是确保 Ansible 与其所有主机建立连接的基本测试。

\all 表示所有主机。我们可以很容易地指定一个组:

  1. ansible -m ping droplets

我们还可以指定一个单独的主机:

  1. ansible -m ping host1

我们可以通过用冒号分隔它们来指定多个主机:

  1. ansible -m ping host1:host2

命令的 -m ping 部分是 Ansible 使用 \ping 模块的指令。这些基本上是可以在远程主机上运行的命令。ping 模块以多种方式运行,例如Linux 中的普通 ping 实用程序,但它会检查 Ansible 连接。

ping 模块实际上并没有接受任何参数,但我们可以尝试另一个命令来查看它是如何工作的。我们通过键入 -a 将参数传递到脚本中。

\shell 模块让我们可以向远程主机发送终端命令并检索结果。例如,要找出 host1 机器上的内存使用情况,我们可以使用:

  1. ansible -m shell -a 'free -m' host1
host1 | success | rc=0 >>
             total       used       free     shared    buffers     cached
Mem:          3954        227       3726          0         14         93
-/+ buffers/cache:        119       3834
Swap:            0          0          0

结论

到目前为止,您应该已将 Ansible 服务器配置为与您想要控制的服务器进行通信。我们已经验证 Ansible 可以与每个主机通信,并且我们已经使用 ansible 命令远程执行简单任务。

虽然这很有用,但我们没有在本文中介绍 Ansible 最强大的功能:Playbooks。我们已经为通过 Ansible 使用我们的服务器打下了良好的基础,但繁重的工作将在以后的文章中完成,届时我们将介绍如何使用 Playbooks 自动配置您的远程计算机。

©2015-2025 艾丽卡 support@alaica.com