目录
[一、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 会按照一定顺序寻找配置文件,就像你先在自己房间找东西,找不到再去客厅找一样:
查找顺序:
-
当前项目目录:先看看当前文件夹有没有配置文件
-
用户家目录:再到你的个人文件夹里找(~/.ansible.cfg)
-
系统目录:最后到系统公共位置找(/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 密钥,不用输密码
bashask_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 很聪明,它会"就近取材":
-
命令行参数(优先级最高)
-
当前目录的配置文件
-
用户家目录的配置文件
-
系统默认配置(优先级最低)
比如你在命令行指定了清单文件:
bash
ansible-playbook -i my_inventory playbook.yml
那么 Ansible 就会用你指定的清单,忽略配置文件里的设置。
八、最佳实践建议
-
项目独立:每个项目有自己的配置文件
-
版本控制:把配置文件也放到Git里管理
-
最小权限:只在需要时才用管理员权限
-
密钥登录:尽量用SSH密钥,不用密码
-
环境分离:开发、测试、生产环境用不同配置
-
注释清晰:在配置文件里写清楚每个设置的作用
九、总结
Ansible 配置文件就像是一本"使用说明书",告诉 Ansible:
-
去哪找服务器清单
-
怎么连服务器(用户名、密码/密钥)
-
用什么权限执行任务(普通用户还是管理员)
通过合理配置,你可以:
-
让不同环境使用不同设置
-
提高安全性(最小权限原则)
-
减少重复输入(用密钥代替密码)
-
让自动化流程更顺畅