type
status
date
slug
summary
tags
category
icon
password
管理 Ansible 配置文件详解
Ansible 是一个强大的自动化工具,允许用户通过配置文件自定义行为。在使用 Ansible 时,有两个核心的配置文件:
ansible.cfg
和 ansible-navigator.yml
。这篇博客将简明易懂地解释如何管理和优化这两个配置文件。1. Ansible 配置文件 (ansible.cfg
)
- 文件名:
ansible.cfg
- 用途:
ansible.cfg
是 Ansible 的主配置文件,用于管理 Ansible 的默认行为和特权提升设置。它是以键值对的形式进行配置,并通过不同部分来分类定义。
主要部分和关键配置项
- [defaults] 部分
inventory
: 指定inventory
文件的位置,定义哪些主机是 Playbook 的目标。例如:inventory = ./inventory
remote_user
: 指定远程执行任务时使用的用户。默认用户是登录用户。ask_pass
: 是否需要输入 SSH 密码。设置为false
时,无需输入密码,适合无密码登录的配置。
- [privilege_escalation] 部分
become
: 启用特权提升(类似于使用sudo
)。当设置为true
时,Ansible 会自动提权。become_method
: 指定使用何种提权方式,通常为sudo
。become_user
: 指定提权后的用户。比如可以设置为root
,这样执行任务时将以root
用户身份运行。become_ask_pass
: 是否要求输入提权密码。通常设置为false
,以避免每次执行任务时要求输入密码。
示例配置文件
这个配置文件设置了使用指定用户
user
进行远程任务执行,并使用 sudo
提权到 root
用户执行命令。同时,禁用了密码询问功能,以简化执行过程。2. Ansible Navigator 配置文件 (ansible-navigator.yml
)
Ansible Navigator 是 Ansible 的一个增强工具,用于更方便地管理和执行 Playbook。它的配置文件
ansible-navigator.yml
用于定义如何使用容器执行环境以及是否保存 Playbook 的执行结果。主要配置项
- execution-environment: 控制是否启用容器化的执行环境。可以启用或禁用容器,决定在主机还是容器中运行 Playbook。
- image: 如果启用了容器执行环境,可以指定一个容器镜像来运行任务。
- pull.policy: 定义是否需要从远程仓库拉取最新的镜像。常见策略:
missing
: 仅在本地不存在镜像时才拉取。always
: 每次运行时都拉取最新镜像。never
: 永不拉取,始终使用本地已有镜像。
- playbook-artifact: 定义是否保存 Playbook 执行结果。可以启用或禁用该功能。
示例配置文件
这个配置文件示例禁用了容器执行,并且设定了只在需要时拉取镜像,同时不保存执行结果。
3. 如何查看 Ansible 配置
Ansible Navigator 提供了
ansible-navigator config
命令,用于查看 Ansible 当前的配置,包括各个参数的来源和当前值。命令使用说明
ansible-navigator config
: 这个命令列出了 Ansible 的所有配置参数的值,包括它们的默认值、来源(配置文件或环境变量),以及实际使用的当前值。
示例输出
这个输出展示了每个配置项的默认值、它们的配置来源以及当前实际使用的值。比如,可以看到
become
选项在配置文件中被启用了,并使用 sudo
提权到 root
用户。4. Ansible 配置文件查找顺序
Ansible Navigator 按以下顺序查找配置文件:
- 环境变量: 如果设置了
ANSIBLE_NAVIGATOR_CONFIG
环境变量,它会使用该变量指定的配置文件。
- 默认文件路径: 如果没有环境变量设置,它会查找当前目录下的
.ansible-navigator.yml
或ansible-navigator.yml
文件。
5. 总结
ansible.cfg
文件定义了 Ansible 的核心行为,帮助用户设置默认的远程用户、特权提升策略等。
ansible-navigator.yml
文件则用于管理 Ansible Navigator 工具的具体运行环境,决定是否使用容器以及如何保存 Playbook 执行的详细信息。
- 使用
ansible-navigator config
命令,可以直观地查看所有配置项的来源和当前设置,从而确保 Ansible 的行为符合预期。
通过对
ansible.cfg
和 ansible-navigator.yml
文件的配置,你可以更高效地管理 Ansible 的自动化流程,灵活控制远程执行环境和特权提升设置,提升自动化任务的执行效率。Ansible 连接配置
Ansible 需要通过配置文件与受管主机进行通信。以下是主要配置要点:
1. 受管主机清单
- 清单文件位置: 在
ansible.cfg
中指定。
2. 连接设置
- 默认连接协议: Ansible 默认使用 SSH。
- 远程用户: 在
ansible.cfg
中设置远程用户。
- 特权提升: 启用
sudo
提权。
3. 身份验证
- 推荐使用 SSH 密钥: 便于自动登录。
- 若无密钥,可启用密码认证:
4. Ansible Navigator 配置
Ansible Navigator 用于运行 Ansible 任务。配置文件
ansible-navigator.yml
控制其行为。示例配置 (ansible-navigator.yml
):
运行时提示输入密码:
总结
- 清单文件: 定义要管理的主机,配置在
ansible.cfg
。
- 连接协议: 默认使用 SSH,设置远程用户和提权。
- 身份验证: 优先用 SSH 密钥,若无则启用密码。
- Ansible Navigator: 管理 Playbook 执行和结果保存。
疑问:是不是通过ansible.cfg可以设置哪些主机进行受管,如何通信。通过ansible-navigator.yml可以配置剧本执行的默认参数啊?
是的,您说得对:
ansible.cfg
- 定义默认行为:
ansible.cfg
文件用于配置 Ansible 的默认行为,包括连接方式、用户权限、日志记录等设置。 - 指定清单位置: 在
ansible.cfg
中,你可以指定主机清单的位置。例如,使用以下配置指定清单文件:
ansible-navigator.yml
: 用于配置剧本执行的默认参数(如是否保存执行结果、容器执行环境等)。
这样可以使 Ansible 的配置更加清晰和灵活。
使用 ssh-copy-id
和 Ansible 管理 SSH 密钥
在配置 SSH 访问时,常常需要将 SSH 公钥复制到远程主机,以便实现无密码登录。这里,我们介绍了如何使用
ssh-copy-id
命令和 Ansible Playbook 来管理 SSH 密钥。1. ssh-copy-id
命令
ssh-copy-id
是一个命令行工具,用于将本地的 SSH 公钥自动添加到远程主机的 authorized_keys
文件中,从而实现无密码 SSH 登录。以下是使用 ssh-copy-id
的步骤:- 生成 SSH 密钥(如果尚未生成):
- 将公钥复制到远程主机:
这个命令会将您的公钥(通常是
~/.ssh/id_rsa.pub
)添加到远程主机指定用户的 ~/.ssh/authorized_keys
文件中。2. 使用 Ansible 管理 SSH 密钥
除了手动使用
ssh-copy-id
,还可以通过 Ansible 自动化管理多个主机的 SSH 密钥。使用 Ansible 的 ansible.posix.authorized_key
模块,可以确保指定用户的 authorized_keys
文件中存在相应的公钥。以下是一个简单的 Ansible Playbook 示例:
3. ssh-copy-id
vs. Ansible
ssh-copy-id
: 适合快速手动配置单个主机,操作简单,直接将公钥添加到远程主机。
- Ansible: 更加高效,适用于批量管理多个主机,确保公钥的存在和一致性。特别是在复杂环境中,使用 Ansible 可以大大简化操作。
结论
对于需要进行频繁 SSH 访问的情况,选择合适的工具至关重要。对于单个主机,
ssh-copy-id
提供了简单直接的解决方案;而对于多个受管主机,Ansible 则提供了强大的自动化管理能力。根据具体需求选择合适的方法,可以提高效率,减少错误。Ansible 中的特权升级
在使用 Ansible 进行自动化管理时,通常需要以特权用户身份(如
root
)执行某些操作。为了提高安全性并满足审计要求,Ansible 提供了特权升级的功能。以下是如何在 Ansible 中设置特权升级的简要说明。1. 特权升级设置
在 Ansible 中,你可以通过以下配置项来启用特权升级:
become
: 将此选项设置为true
以启用特权升级。
become_method
: 指定特权升级的方法,通常使用sudo
。
become_user
: 指定要升级到的用户,通常是root
。
become_ask_pass
: 如果需要输入密码进行特权升级,则将此选项设置为true
。
2. 示例配置
在你的 Ansible Playbook 中,可以通过以下方式配置特权升级:
3. 使用 Ansible Navigator 运行 Playbook
如果你在使用 Ansible Navigator 来运行 Playbook,可以使用以下命令:
-ask-pass
: 在运行时提示输入 SSH 密码(如果需要)。
重要提示
在配置特权升级时,请确保:
- 对特权用户的操作进行适当的审计和监控,以确保安全性。
- 不要在未授权的情况下使用特权身份执行敏感操作。
总结
Ansible 的特权升级功能提供了一种安全的方式来执行需要管理员权限的任务。通过合理配置
become
选项,您可以有效地管理和自动化系统任务,同时保持系统的安全性。Ansible 中的特权升级配置
在使用 Ansible 进行任务自动化时,特权升级是一个重要的功能,它允许用户以管理员身份(如
root
)执行特定操作。以下是如何配置和使用 Ansible 的特权升级的简明说明。1. 配置 /etc/sudoers
要允许某个用户(如
someuser
)无密码使用 sudo
,可以在 /etc/sudoers
文件中添加以下行:这行配置允许
someuser
在任何主机上以任何用户身份执行任何命令,而无需输入密码。2. Ansible 配置文件 ansible.cfg
在
ansible.cfg
文件中,你可以配置特权升级的设置,如下所示:remote_user
: 指定使用的远程用户(如someuser
)。
become
: 设置为true
启用特权升级。
become_method
: 指定特权升级的方法(如sudo
)。
become_user
: 指定要提权的用户(如root
)。
become_ask_pass
: 设置为false
表示不需要输入提权密码。
3. 安全考虑
在选择特权升级方法时,务必考虑其安全影响。不同的组织和部署可能有不同的安全要求和权衡。确保所选配置符合你的组织的安全策略。
总结
通过合理配置
/etc/sudoers
和 ansible.cfg
文件,您可以轻松地在 Ansible 中实现安全的特权升级,确保任务的顺利执行。同时,务必注意安全性,以保护系统免受潜在风险。练习:
1. ansible-navigator.yml 配置文件
创建
ansible-navigator.yml
配置文件,用于定义 Ansible Navigator 的执行环境和行为:目的:
- 配置
ansible-navigator
使用指定的 Docker 镜像作为执行环境。该镜像来自内部私有仓库utility.lab.example.com
。
- 设置镜像拉取策略为仅当镜像缺失时拉取,避免每次都重新下载。
- 禁用 Playbook 结果的存档,减少存储开销。
2. 列出执行环境镜像
列出当前可用的执行环境镜像:
目的:
- 检查现有的 Ansible 执行环境镜像,确认是否已拉取所需镜像。
3. ansible.cfg 配置文件
配置 Ansible 的
ansible.cfg
文件以定义默认行为和设置:目的:
- 将
inventory
文件路径设置为当前目录中的./inventory
,从而让 Ansible 自动找到主机清单文件。
4. inventory 主机清单文件
定义 Ansible 的
inventory
文件,包含不同的服务器组和主机:目的:
- 定义和组织不同的服务器组,比如工作站 (
myself
),内部网服务器 (intranetweb
),外部网服务器 (internetweb
)。
- 通过
web:children
创建一个父组web
,可以一次性操作所有 Web 服务器。
5. ping 测试命令
使用
ping
命令测试各个组和服务器的连通性:目的:
- 测试各个服务器的连通性,确保它们可以通过 Ansible 被管理。
6. ansible.cfg 配置文件扩展
进一步配置
ansible.cfg
,以支持权限提升(privilege_escalation
):目的:
- 启用
sudo
权限提升,确保任务在需要 root 权限时能够执行。
- 配置 Ansible 在运行需要权限的任务时提示用户输入密码。
7. ping 测试命令(带权限)
通过
ping
测试 intranetweb
组,并提示输入 sudo
密码:目的:
- 测试
intranetweb
服务器的连通性,并确保权限提升机制正常工作。
整体备注:
- 项目结构:所有与 Ansible 管理任务相关的文件(如 Playbook、主机清单、配置文件)都组织在
playbook-manage
目录下,方便集中管理。
- 配置文件设置:
ansible.cfg
配置了默认的 inventory 文件路径以及权限提升机制,简化了日常管理操作。
- 连通性测试:通过
ping
测试命令,确保服务器可以被 Ansible 管理,且权限提升操作能够正确执行。
这样,整个配置和管理流程都清晰易懂,确保 Ansible 能够顺利管理各类服务器。
- 作者:みなみ
- 链接:https://tangly1024.com/資格勉強/124d7ae8-88e2-8002-ae91-c65fcd0fa822
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章