管理 Ansible 配置文件

发布时间:2026/10/9 12:12:46
管理 Ansible 配置文件
配置 Ansible您可以在每个 Ansible 项目目录中创建和编辑两个文件用于配置 Ansible 的行为和 ansible‑navigator 命令ansible.cfg用于配置多个 Ansible 工具的行为。ansible‑navigator.yml用于更改 ansible‑navigator 命令的默认选项。管理 Ansible 设置您可在 Ansible 项目的目录中创建ansible.cfg文件以应用适用于多个 Ansible 工具的设置。Ansible 配置文件由几个部分组成每一部分含有以键值对形式定义的设置。部分的标题以方括号括起。对于基本操作请使用以下两部分[defaults]用于设置 Ansible 操作的默认值[privilege_escalation]用于配置 Ansible 如何在受管主机上执行特权升级例如下面是典型的 ansible.cfg 文件[defaults] inventory ./inventory remote_user user ask_pass false [privilege_escalation] become true become_method sudo become_user root become_ask_pass false确定当前配置设置ansible‑navigator config命令会显示当前 Ansible 配置。该命令会显示 Ansible 用于每个参数的实际值及其检索该值、配置文件或环境变量的来源。以下输出来自在包含ansible.cfg文件的/home/student/project/目录中运行的ansible‑navigator config命令Name Default Source Current ...output omitted... 44|Default ask pass True default False 45|Default ask vault pass True default False 46|Default become False /home/student/project/ansible.cfg True 47|Default become ask pass False /home/student/project/ansible.cfg True ...output omitted... 50|Default become method False /home/student/project/ansible.cfg sudo 51|Default become user False /home/student/project/ansible.cfg root ...output omitted...在以上示例中每一行描述一个 Ansible 配置参数。Default ask pass 和 Default ask vault pass 参数使用默认值如 Default 列中的 True 值所示。Default become 和 Default become ask pass 参数已在 /home/student/project/ansible.cfg 配置文件中手动配置为 True。Default 列为这两个参数的 False。Source 列提供定义这些参数的配置文件的路径Current 列显示这两个参数的值为 True。Default become method 参数的当前值为 sudoDefault become user 参数的当前值为 root。要退出 ansible‑navigator config 命令的交互模式请按 Esc 或键入 :q。管理自动化内容导航器的设置您可以为 ansible‑navigator 创建配置文件或设置文件以覆盖其配置设置的默认值。设置文件可以采用 JSON (.json) 或 YAML.yml 或 .yaml格式。本项讨论主要采用 YAML 格式。自动化内容导航器按以下顺序查找设置文件并使用它找到的第一个文件如果设置了ANSIBLE_NAVIGATOR_CONFIG环境变量则使用所指定位置处的配置文件。当前 Ansible 项目目录中的ansible‑navigator.yml文件。~/.ansible‑navigator.yml文件在您的主目录中。请注意其文件名开头有一个 “点”。与 Ansible 配置文件一样每个项目都可以有自己的自动化内容导航器设置文件。以下ansible‑navigator.yml文件会配置一些常见设置ansible-navigator: execution-environment: image: utility.lab.example.com/ee-supported-rhel8:latest pull: policy: missing playbook-artifact: enable: falseexecution‑environment部分配置 ansible‑navigator 命令所用执行环境的设置。image部分定义执行环境要使用的容器镜像名称。嵌套在pull部分下方的policy部分指出只有本地机器上不存在容器镜像时才要拉取容器镜像。嵌套在playbook‑artifact部分下方的enable部分可禁用在使用 ansible‑navigator run 命令时生成 playbook 工件。如果运行 playbook 时需要提示输入密码则必须禁用 playbook 工件。配置连接Ansible 需要知道如何与其受管主机通信。更改配置文件的一个最常见原因是为了控制 Ansible 使用什么方法和用户来管理受管主机。下面提供一些所需信息示例列出受管主机和主机组的清单的位置用于与受管主机通信的连接协议默认为 SSH以及是否需要非标准网络端口来连接到服务器要在受管主机上使用的远程用户可以是 root 用户也可以是非特权用户如果远程用户为非特权用户Ansible 需要知道是否要尝试将特权升级为 root 以及如何升级例如通过 sudo是否提示输入 SSH 密码或 sudo 密码才能登录或获取特权清单位置在 ansible.cfg 文件的 [defaults] 部分inventory 参数可以直接指向某一静态清单文件或者指向包含多个静态清单文件和动态清单脚本的目录。[defaults] inventory ./inventory连接设置默认情况下Ansible 使用 SSH 协议连接受管主机。控制 Ansible 如何连接受管主机的最重要参数在 [defaults] 部分中设置。如果没有另行配置Ansible 会尝试连接受管主机时使用的用户名与运行 Ansible 命令的本地用户相同。若要指定不同的远程用户请将 remote_user 参数设置为该用户名。如果为运行 Ansible 的本地用户配置了 SSH 私钥使得它们能够在受管主机上进行远程用户的身份验证则 Ansible 将自动登录。如果您没有为远程用户配置基于 SSH 密钥的身份验证可以使用基于密码的身份验证。如果要对 ansible‑navigator 使用基于密码的 SSH 身份验证您需要配置 ansible‑navigator 以防生成 playbook 工件记录 playbook 运行信息的日志文件。下面提供一个最简单的 ansible‑navigator.yml 文件示例该文件阻止了 playbook 工件的生成ansible-navigator: playbook-artifact: enable: false利用此配置除了要运行的 playbook 外您还可以使用-m stdout和--ask-pass选项运行ansible-navigator run这样 ansible‑navigator 命令便会提示您输入远程用户的 SSH 密码。如果您设置了基于密码的 SSH 身份验证则可以配置基于密钥的 SSH 身份验证。第一步是确保在~/.ssh中为控制节点上的用户配置了 SSH 密钥对。可以运行ssh‑keygen命令来生成密钥对。如果是单一现有受管主机您可以在受管主机上安装公钥并使用ssh‑copy‑id命令在本地的~/.ssh/known_hosts文件中填充其主机密钥如下所示[usercontrolnode ~]$ ssh-copy-id rootweb1.example.com The authenticity of host web1.example.com (192.168.122.181) cant be established. ECDSA key fingerprint is 70:9c:03:cd:de:ba:2f:11:98:fa:a0:b3:7c:40:86:4b. 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 rootweb1.example.coms password: Number of key(s) added: 1 Now try logging into the machine, with: ssh rootweb1.example.com and check to make sure that only the key(s) you wanted were added.