Ansible 配置文件详解:让自动化管理更轻松

目录

[一、Ansible 配置文件是什么?](#一、Ansible 配置文件是什么?)

二、配置文件在哪里找?

查找顺序:

[三、ansible.cfg 配置文件详解](#三、ansible.cfg 配置文件详解)

配置文件长什么样?

各个参数的意思:

[defaults 部分:](#defaults 部分:)

[privilege_escalation 部分:](#privilege_escalation 部分:)

[四、ansible-navigator.yml 配置文件](#四、ansible-navigator.yml 配置文件)

五、如何查看当前配置?

六、连接服务器的配置

[1. 清单配置](#1. 清单配置)

[2. SSH连接配置](#2. SSH连接配置)

[3. 权限提升配置](#3. 权限提升配置)

七、配置文件的优先级

八、最佳实践建议

九、总结


一、Ansible 配置文件是什么?

想象一下,你有一台智能机器人管家,你需要告诉它一些基本规则:去哪找要管理的服务器列表、用什么用户名登录、要不要使用管理员权限等等。Ansible 配置文件就是告诉 Ansible 这些基本规则的地方。

Ansible 主要使用两个配置文件:

  • ansible.cfg:控制 Ansible 的基本行为,所有 Ansible 工具都会读取

  • ansible-navigator.yml:专门控制 ansible-navigator 命令的行为


二、配置文件在哪里找?

Ansible 会按照一定顺序寻找配置文件,就像你先在自己房间找东西,找不到再去客厅找一样:

查找顺序:

  1. 当前项目目录:先看看当前文件夹有没有配置文件

  2. 用户家目录:再到你的个人文件夹里找(~/.ansible.cfg)

  3. 系统目录:最后到系统公共位置找(/etc/ansible/ansible.cfg)

:建议在每个项目目录里都放一个自己的 ansible.cfg,这样不同项目可以有不同配置,不会互相影响。


三、ansible.cfg 配置文件详解

配置文件长什么样?

bash 复制代码
# 这是注释,用 # 或 ; 开头都可以
[defaults]                    # 基础设置部分
inventory = ./inventory       # 清单文件的位置(当前目录下的inventory文件)
remote_user = deploy_user     # 登录服务器的用户名
ask_pass = false              # 不询问SSH密码(使用密钥登录)

[privilege_escalation]        # 权限提升设置部分
become = true                 # 执行任务时切换到管理员
become_method = sudo          # 使用sudo切换权限
become_user = root            # 切换到root用户
become_ask_pass = false       # 不询问sudo密码

各个参数的意思:

defaults 部分:
  • inventory:告诉 Ansible 去哪找服务器列表文件

  • remote_user:登录服务器时用哪个用户名

  • ask_pass:是否每次都要输入SSH密码(建议用密钥,设为false)

privilege_escalation 部分:
  • become:是否需要获取管理员权限

  • become_method:如何获取权限(常用sudo)

  • become_user:要切换成哪个用户(通常是root)

  • become_ask_pass:切换权限时要不要输入密码


四、ansible-navigator.yml 配置文件

ansible-navigator 是 Ansible 的新工具,它在一个"小容器"里运行,需要额外配置:

bash 复制代码
ansible-navigator:
  execution-environment:          # 执行环境设置
    image: mycompany.com/ansible:latest  # 使用哪个容器镜像
    pull:
      policy: missing             # 本地没有才下载镜像
  playbook-artifact:
    enable: false                 # 不保存执行记录(输密码时必须关掉)

五、如何查看当前配置?

想知道 Ansible 现在用的什么配置?很简单:

bash 复制代码
# 查看所有配置和来源
ansible-navigator config

这会显示一个表格,告诉你:

  • 每个设置项的名字

  • 默认值是什么

  • 当前值从哪里来的(哪个配置文件)

  • 当前实际用的是哪个值


六、连接服务器的配置

1. 清单配置

bash 复制代码
[defaults]
inventory = ./servers_list  # 可以是指向文件或目录
  • 可以是一个具体的文件

  • 也可以是一个目录,Ansible 会读取目录里的所有清单文件

2. SSH连接配置

默认情况下,Ansible 用 SSH 连接服务器,和你平时用 SSH 登录服务器一样。

两种登录方式:

  • 密钥登录(推荐):配置好 SSH 密钥,不用输密码

    bash 复制代码
    ask_pass = false
  • 密码登录:每次都要输密码

    bash 复制代码
    # 运行时需要加参数
    ansible-navigator run --ask-pass playbook.yml

3. 权限提升配置

很多时候,我们用普通用户登录,然后临时切换成 root 执行管理任务:

bash 复制代码
[privilege_escalation]
become = true           # 自动获取管理员权限
become_method = sudo    # 用sudo命令
become_user = root      # 切换到root用户

:最好只在需要管理员权限的任务时才切换,不要全程用 root。可以在 Playbook 中控制:

bash 复制代码
- name: 普通任务
  tasks:
    - name: 不需要权限的任务
      command: whoami
    
    - name: 需要权限的任务
      command: systemctl restart nginx
      become: true      # 只有这个任务用管理员权限

七、配置文件的优先级

Ansible 很聪明,它会"就近取材":

  1. 命令行参数(优先级最高)

  2. 当前目录的配置文件

  3. 用户家目录的配置文件

  4. 系统默认配置(优先级最低)

比如你在命令行指定了清单文件:

bash 复制代码
ansible-playbook -i my_inventory playbook.yml

那么 Ansible 就会用你指定的清单,忽略配置文件里的设置。


八、最佳实践建议

  1. 项目独立:每个项目有自己的配置文件

  2. 版本控制:把配置文件也放到Git里管理

  3. 最小权限:只在需要时才用管理员权限

  4. 密钥登录:尽量用SSH密钥,不用密码

  5. 环境分离:开发、测试、生产环境用不同配置

  6. 注释清晰:在配置文件里写清楚每个设置的作用


九、总结

Ansible 配置文件就像是一本"使用说明书",告诉 Ansible:

  • 去哪找服务器清单

  • 怎么连服务器(用户名、密码/密钥)

  • 用什么权限执行任务(普通用户还是管理员)

通过合理配置,你可以:

  • 让不同环境使用不同设置

  • 提高安全性(最小权限原则)

  • 减少重复输入(用密钥代替密码)

  • 让自动化流程更顺畅

相关推荐
冬奇Lab12 小时前
一天一个开源项目(第35篇):GitHub Store - 跨平台的 GitHub Releases 应用商店
开源·github·资讯
Jahzo14 小时前
openclaw桌面端体验--ClawX
人工智能·github
逛逛GitHub16 小时前
6个粉丝推荐的 GitHub 项目,收藏一波。
github
MaoPou20 小时前
Hello Haxe篇
github
蝎子莱莱爱打怪20 小时前
Centos7中一键安装K8s集群以及Rancher安装记录
运维·后端·kubernetes
Bigger1 天前
为什么你的 Git 提交需要签名?—— Git Commit Signing 完全指南
git·开源·github
DianSan_ERP2 天前
电商API接口全链路监控:构建坚不可摧的线上运维防线
大数据·运维·网络·人工智能·git·servlet
呉師傅2 天前
火狐浏览器报错配置文件缺失如何解决#操作技巧#
运维·网络·windows·电脑
不是二师兄的八戒2 天前
Linux服务器挂载OSS存储的完整实践指南
linux·运维·服务器
慢慢开始吧2 天前
Redmi Note 7 Pro (Violet) 爆改满血 Linux 掌上服务器指南
github