ansible 初入门

本贴最后更新于 2029 天前,其中的信息可能已经时移世异

前言

既然你已经读了安装指南安装了 Ansible,是时候开始使用一些临时命令了。

我们首先展示的不是 Ansible 强大的配置/部署/编排功能。这些特性是由一个单独的章节所涵盖的剧本来处理的。

本节是关于如何使 Ansible 开始运行。一旦您理解了这些概念,请阅读 ad-hoc 命令简介关于更多的细节,然后您将准备开始学习有关剧本和探索最有趣的部分!

远程连接信息

在我们开始之前,了解 Ansible 如何通过 SSH 与远程计算机进行通信是很重要的。

默认情况下,Ansible 将尝试在可能的情况下使用本机 OpenSSH 进行远程通信。这使 ControlPersio(性能特性)、Kerberos 和选项在 ~/.ssh/config 例如跳转主机设置。但是,当使用 EnterpriseLinux 6 操作系统作为控制机器(RedHatEnterpriseLinux 和 CentOS 等衍生产品)时,OpenSSH 的版本可能太老,无法支持 ControlPersio。在这些操作系统上,Ansible 将退回到使用高质量的 Python 实现 OpenSSH,称为“paramiko”。如果您希望使用 KerberizedSSH 等特性,请考虑使用 Fedora、OSX 或 Ubuntu 作为您的控制机器,直到您的平台可以使用更新版本的 OpenSSH 为止。

偶尔会遇到不支持 SFTP 的设备。这是很少见的,但是如果发生这种情况,您可以切换到 scp 模式。配置可测性.

在使用远程机器时,Ansible 默认假定您使用的是 SSH 键。鼓励使用 SSH 密钥,但在需要时也可以通过提供该选项来使用密码身份验证。--ask-pass。如果使用 sudo 特性和 sudo 需要密码时,也可以提供 --ask-become-pass(以前 --ask-sudo-pass 已经被否决了)。

注:

Ansible 不公开允许用户和 ssh 进程之间通信的通道,以便在使用 ssh 连接插件(这是默认的)时手动接受密码来解密 ssh 密钥。使用 ssh-agent 强烈推荐。

虽然这可能是常识,但还是值得分享的:任何管理系统都可以通过在被管理的机器附近运行而受益。如果您在云中运行 Ansible,请考虑从云中的机器上运行它。在大多数情况下,这将比在开放的互联网上工作得更好。

作为一个高级主题,Ansible 不只是需要通过 SSH 远程连接。传输是可插拔的,并且有一些选项可以在本地管理事物,以及管理 chroot、LXC 和监狱容器。一种名为“Anble-Pull”的模式也可以反转系统,并通过计划的 git 签出来从中央存储库中提取配置指令,从而使系统“电话回家”。

你的第一条命令

现在您已经安装了 Ansible,现在是开始学习一些基本知识的时候了。

编辑(或创建)/etc/ansible/hosts 在里面放一个或多个远程系统。您的公共 ssh 密钥应该位于 authorized_keys 关于这些系统:

192.0.2.50
aserver.example.org
bserver.example.org

这是一个库存文件,在这里也有更深入的解释:处理库存.

我们假设您使用 SSH 密钥进行身份验证。若要设置 SSH 代理以避免重新键入密码,请执行以下操作:

$ ssh-agent bash
$ ssh-add ~/.ssh/id_rsa

(取决于您的设置,您可能希望使用 Ansible 的 --private-key 选项来指定 pem 文件)

现在,ping 您的所有节点:

$ ansible all -m ping

Ansible 将尝试使用当前用户名远程连接到计算机,就像 SSH 一样。若要重写远程用户名,只需使用‘-u’参数即可。

如果您想要访问 sudo 模式,也有标志可以这样做:

# as bruce
$ ansible all -m ping -u bruce
# as bruce, sudoing to root
$ ansible all -m ping -u bruce --sudo
# as bruce, sudoing to batman
$ ansible all -m ping -u bruce --sudo --sudo-user batman

# With latest version of ansible `sudo` is deprecated so use become
# as bruce, sudoing to root
$ ansible all -m ping -u bruce -b
# as bruce, sudoing to batman
$ ansible all -m ping -u bruce -b --become-user batman

(如果您碰巧想使用 sudo 替换,那么 Ansible 的配置文件中的 sudo 实现是可以更改的。传递给 sudo(类似-H)的标志也可以设置在那里。

现在,在所有节点上运行一个实时命令:

$ ansible all -a "/bin/echo hello"

祝贺你!你刚刚和 Ansible 联系了你的节点。很快就要到了:阅读一些更真实的案例 ad-hoc 命令简介,探索使用不同模块可以做什么,并了解 Ansible 使用剧本语言。Ansible 不仅仅是运行命令,它还具有强大的配置管理和部署功能。还有更多需要探索的地方,但是您已经有了一个完全正常工作的基础设施!

小贴士

在运行命令时,可以使用“localhost”或“127.0.0.1”作为服务器名称来指定本地服务器。

例子:

$ ansible localhost -m ping -e 'ansible_python_interpreter="/usr/bin/env python"'

通过将此添加到库存文件中,可以显式地指定 localhost:

localhost ansible_connection=local ansible_python_interpreter="/usr/bin/env python"

主机密钥检查

默认情况下,Ansible 启用了主机密钥检查。

如果重新安装了一个主机,并且在‘已知_主机’中有一个不同的键,这将导致一个错误消息,直到更正。如果主机最初不在‘已知_主机’中,这将导致提示确认密钥,如果使用 Ansible,比如 cron,就会产生交互体验。你可能不想要这个。

如果您理解此行为的含义并希望禁用此行为,则可以通过编辑 /etc/ansible/ansible.cfg~/.ansible.cfg:

[defaults]
host_key_checking = False

或者,这可以由ANSIBLE_HOST_KEY_CHECKING环境变量:

$ export ANSIBLE_HOST_KEY_CHECKING=False

还请注意,Paramiko 模式下的主机键检查相当慢,因此在使用此功能时也建议切换到“ssh”。

Ansible 将在远程 syslog 中记录有关远程系统中模块参数的一些信息,除非任务或播放被标记为“no_log:true”属性。这一点将在稍后解释。

若要在控制计算机上启用基本日志记录,请参见配置可测性记录并设置“log_path”配置文件设置。企业用户也可能对可抗塔。Towor 提供了一个非常健壮的数据库日志功能,在这里可以根据主机、项目和特定的库存来深入挖掘和查看历史-无论是图形化还是 RESTAPI 都是可解释的。

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...