【Ansible】(三)基础配置与连接设置

做Ansible自动化运维,第一步就是搞定配置文件和主机连接------这是所有自动化操作的基础,配置错一步,后续所有任务都无法执行。这篇笔记只讲实操,不堆砌理论,配置文件、命令直接复制能用,帮你快速打通Ansible连接环节。

目录

一、Ansible配置文件(ansible.cfg):项目级隔离配置

[1. 基础配置示例(直接复制到项目目录,命名为ansible.cfg)](#1. 基础配置示例(直接复制到项目目录,命名为ansible.cfg))

[2. 关键参数说明(避免踩坑)](#2. 关键参数说明(避免踩坑))

[3. 查看当前生效配置(排查配置问题必备)](#3. 查看当前生效配置(排查配置问题必备))

二、ansible-navigator.yml:适配导航工具的配置

三、主机连接设置(SSH免密+密码登录)

[1. SSH免密登录(运维标配,推荐)](#1. SSH免密登录(运维标配,推荐))

[2. 密码登录(应急场景)](#2. 密码登录(应急场景))

[3. 非root用户sudo免密(生产环境常用)](#3. 非root用户sudo免密(生产环境常用))

[博客一 Q&A](#博客一 Q&A)

Q1:Ansible配置文件的查找顺序是什么?为什么推荐项目级配置?

Q2:become相关参数为什么必须配置?

Q3:SSH免密登录失败,常见原因有哪些?

Q4:ansible-navigator执行时卡住,怎么解决?


一、Ansible配置文件(ansible.cfg):项目级隔离配置

Ansible会按固定优先级查找配置文件,优先使用项目目录下的配置,能有效隔离不同环境(开发/测试/生产),避免全局配置互相影响。

1. 基础配置示例(直接复制到项目目录,命名为ansible.cfg)

复制代码
[defaults]
inventory = ./inventory        # 指定主机清单路径(当前目录下的inventory文件)
remote_user = someuser         # 连接受管主机的默认普通用户(如centos、ec2-user)
ask_pass = false               # 密钥登录时设为false,不用每次输密码

[privilege_escalation]
become = true                   # 默认开启特权升级(普通用户sudo到root)
become_method = sudo            # 提权方式,默认sudo
become_user = root              # 提权目标用户,一般为root
become_ask_pass = false        # 免密sudo时设为false,不用输sudo密码

2. 关键参数说明(避免踩坑)

  • inventory:指定主机清单路径,后续执行任务时不用反复指定,简化命令;

  • remote_user:尽量不用root直接登录,用普通用户+sudo提权,更符合生产安全规范;

  • become相关:核心是实现"普通用户登录,root权限执行",生产环境必配,避免直接用root登录风险。

3. 查看当前生效配置(排查配置问题必备)

有时候配置不生效,不知道是哪个配置文件起作用,用这条命令一键查看:

复制代码
ansible-navigator config

退出交互模式按qEsc即可,能清晰看到每个参数的当前值、默认值和配置来源。

二、ansible-navigator.yml:适配导航工具的配置

如果用ansible-navigator执行任务,建议在项目目录建这个文件,解决密码登录卡住、镜像拉取等常见问题:

复制代码
ansible-navigator:
  execution-environment:
    image: utility.lab.example.com/ee-supported-rhel8:latest
    pull:
      policy: missing  # 本地没有镜像时才拉取,节省时间
  playbook-artifact:
    enable: false     # 禁用playbook工件,避免密码登录时卡住

三、主机连接设置(SSH免密+密码登录)

Ansible通过SSH连接受管主机,日常优先用免密登录,密码登录仅用于临时应急场景。

1. SSH免密登录(运维标配,推荐)

配置一次,后续所有Ansible任务都能免密执行,步骤简单:

复制代码
# 1. 控制节点生成SSH密钥对(一路回车,不用输密码)
ssh-keygen -t rsa

# 2. 将公钥传到受管主机(以someuser用户为例)
ssh-copy-id someuser@web1.example.com

提示"Number of key(s) added: 1",说明配置成功,后续Ansible连接该主机无需输密码。

2. 密码登录(应急场景)

如果临时无法配置免密,需修改两处配置,避免卡住:

  1. 修改ansible.cfg,将ask_pass = false改为ask_pass = true

  2. 确保ansible-navigator.yml中playbook-artifact.enable: false

  3. 执行命令时加--ask-pass参数,示例:

    ansible-navigator run playbook.yml --ask-pass -m stdout

3. 非root用户sudo免密(生产环境常用)

很多生产环境禁止root直接登录,需配置普通用户sudo免密,步骤如下:

  1. 在受管主机执行(给someuser用户配置免密sudo):

    复制代码
    echo "someuser ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/ansible
    chmod 0400 /etc/sudoers.d/ansible  # 必须设置400权限,否则sudo会报错
  2. 控制节点ansible.cfg配置不变(参考第一部分的基础配置),即可实现普通用户免密sudo提权。

Q&A

Q1:Ansible配置文件的查找顺序是什么?为什么推荐项目级配置?

A:优先级从高到低:项目目录ansible.cfg > 用户目录~/.ansible.cfg > 系统/etc/ansible/ansible.cfg。推荐项目级配置,是因为能隔离不同环境(比如开发和生产用不同的清单、用户),避免全局配置修改影响所有项目。

Q2:become相关参数为什么必须配置?

A:生产环境中,直接用root登录受管主机存在安全风险,大多禁止root远程登录。become参数实现"普通用户登录,root权限执行任务",既符合安全规范,又能完成安装软件、修改系统配置等需要root权限的操作。

Q3:SSH免密登录失败,常见原因有哪些?

A:最常见3个原因:① 受管主机~/.ssh目录权限为777(需改为700);② 受管主机~/.ssh/authorized_keys权限为666(需改为600);③ 密钥对生成时输入了密码,需重新生成无密码密钥对。

Q4:ansible-navigator执行时卡住,怎么解决?

A:大概率是playbook工件导致的,在ansible-navigator.yml中设置playbook-artifact.enable: false,禁用工件生成,再重新执行即可;如果是密码登录,记得加--ask-pass参数。

相关推荐
源代码•宸8 小时前
前置准备:定时微服务有什么价值
经验分享·后端·微服务·云原生·架构
IT大白鼠9 小时前
Kubernetes 核心资源ReplicaSet 控制器详解
云原生·容器·kubernetes
池以遇10 小时前
云原生——k8s中的微服务
微服务·云原生·kubernetes
分布式存储与RustFS10 小时前
用 RustFS 原生 CLI `rc` 管对象存储:从 alias 到 cp 的完整玩法
云原生·开源·对象存储·分布式存储·s3·rustfs·性能基准
分布式存储与RustFS10 小时前
用 RPM/DEB 包在 Linux 上安装 RustFS:生产落地第一步
云原生·开源·对象存储·分布式存储·s3·rustfs·性能基准
Tassel_YUE11 小时前
非 ansible 主机批量执行命令方法:psssh 和 pscp(随手记)
linux·网络·ssh·scp·ansible
UseLessQQ11 小时前
云原生 kubernetes 中的service
云原生·容器·kubernetes
大大大大晴天️12 小时前
把湖仓一体放进 K8s:Iceberg、Hudi、Paimon 如何重塑云原生大数据架构
大数据·云原生·kubernetes
智购科技无人售货机工厂12 小时前
2026自动售货机云端API设计规范:从RESTful到GraphQL的接口演进~YH
android·人工智能·驱动开发·单片机·云原生·pandas·设计规范
雨辰AI1 天前
信创数仓分层建模|国产数据库 ODS/DWD/DWS 分层落地规范(金仓 / 达梦 / 高斯适配)
数据库·云原生·政务