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:

  • 去哪找服务器清单

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

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

通过合理配置,你可以:

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

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

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

  • 让自动化流程更顺畅

相关推荐
岩屿2 小时前
Ubuntu下安装Docker并部署.NET API(二)
运维·docker·容器·.net
江湖有缘2 小时前
基于华为openEuler搭建ServerBee服务器监控工具
运维·服务器
那就回到过去2 小时前
RSTP的工作原理
运维·服务器·网络
UpYoung!2 小时前
【SQL Server 2019】企业级数据库系统—数据库SQL Server 2019保姆级详细图文下载安装完全指南
运维·数据库·sqlserver·运维开发·数据库管理·开发工具·sqlserver2019
Gofarlic_OMS2 小时前
Altium许可证状态自动化监控方案
大数据·运维·服务器·人工智能·自动化·github
岱宗夫up2 小时前
GitHub Desktop如何设置中文?这不是个简单问题
git·github
_运维那些事儿2 小时前
skywalking链路追踪
java·运维·ci/cd·软件构建·skywalking·devops
峥嵘life2 小时前
Android16 【GSI】CtsMediaCodecTestCases等一些列Media测试存在Failed项
android·linux·运维·服务器·学习
达子6662 小时前
Ubuntu的Gparted 无法扩展内存 报错umount: /sdb1: target is busy
linux·运维·ubuntu