千家信息网

Ansible学习笔记--配置ansible

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,环境系统环境:CentOS Linux release 7.5.1804 (Core)ansible版本:ansible 2.9.0ansible的配置环境配置Ansible配置以ini格式存储配置数
千家信息网最后更新 2026年11月01日Ansible学习笔记--配置ansible

环境

系统环境:CentOS Linux release 7.5.1804 (Core)

ansible版本:ansible 2.9.0

ansible的配置

环境配置

Ansible配置以ini格式存储配置数据,在Ansible中几乎所有配置都可以通过Ansible的Playbook或环境变量来重新赋值。在运行Ansible命令时,命令将会按照以下顺序查找配置文件。

(1)ANSIBLE_CONFIG :首先,Ansible命令会检查环境变量,及这个环境变量指向的配置文件。

(2)./ansible.cfg :其次,将会检查当前目录下的ansible.cfg配置文件。

(3)~/.ansible.cfg :再次,将会检查当前用户home目录下的.ansible.cfg配置文件。

(4)/etc/ansible/ansible.cfg :最后,将会检查在用软件包管理工具安装Ansible时自动产生的配置文件。

使用环境变量方式来配置

大多数的Ansible参数可以通过设置带有ANSIBLE_开头的环境变量进行配置,参数名称必须都是大写字母,如下配置:

export ANSIBLE_SUDO_USER=root

设置了环境变量之后,ANSIBLE_SUDO_USER就可以在后续操作中直接引用。

设置ansible.cfg配置参数

Ansible有很多配置参数,以下是几个默认的配置参数:

inventory = /root/ansible/hostslibrary = /usr/share/my_modules/forks = 5sudo_user = rootremote_port = 22host_key_checking = Falsetimeout = 20log_path = /var/log/ansible.log

对上面的参数进行说明:

<1> inventory:该参数表示inventory文件的位置,资源清单(inventory)就是Ansible需要连接管理的一些主机列表。

<2> library:Ansible的所有操作都使用模块来执行实现,这个library参数就是指向存放Ansible模块的目录。

<3> forks:设置默认情况下Ansible最多能有多少个进程同时工作,默认5个进程并行处理。具体需要设置多少个,可以根据控制端性能和被管理节点的数量来确定。

<4> sudo_user:设置默认执行命令的用户,也可以在playbo o k中重新设置这个参数。

<5> remote_port:指定连接被管理节点的管理端口,默认是22,除非设置了特殊的SSH端口,否则不需要修改此参数。

<6> host_key_checking:设置是否检查SSH主机的密钥。可以设置为True或False。即ssh的主机再次验证。

<7> timeout:设置SSH连接的超时间隔,单位是秒。

<8> log_path:Ansible默认不记录日志,如果想把Ansible系统的输出记录到日志文件中,需要设置log_path。需要注意,模块将会调用被管节点的(r)syslog来记录,执行Ansible的用户需要有写入日志的权限。

SSH互信配置

将ansible server的ssh公钥分发到各被管节点上。

指定ssh公钥生成格式和存放路径:ssh-keygen -t rsa -f /tmp/temp/id_rsa -N ''

ssh公钥分发目标机:ssh-copy-id root@192.168.246.204

也可以使用ansible自身来批量添加密钥到被控节点上。使用ansible的authorized_key模块即可。

以下是借助expect 工具实现非交互式的s s h- co py- id,免得总是询问远程用户的登录密码。

# 安装expectyum install -y expect
# 编辑expect脚本cat auto_sshcopyid.exp#!/usr/bin/expect set timeout 10 set user_hostname [lindex $argv 0] set password [lindex $argv 1] spawn ssh-copy-id $user_hostname expect {         "(yes/no)?"         {                 send "yes\n"                 expect "*password: " { send "$password\n" }         }         "*password: " { send "$password\n" }}expect eof
# 编辑调用expect的sehll脚本#!/bin/bash#加载系统函数库. /etc/init.d/functionsip=$(echo -n "$(seq -s "," 59 61),187" | xargs -d "," -i echo 192.168.246.{})password="wtf"for i in $ipdo    ping -c 1 $i > /dev/null    if [ $(echo $?) -eq 0 ];then        /tmp/temp/auto_sshcopyid.exp root@$i $password & >> /tmp/temp/a.log        action "$i is ok" /bin/true    else        action "$i There is no!" /bin/false    fidone
# 执行shell脚本配置互信chmod +x /tmp/temp/{sshkey.sh,auto_sshcopyid.exp}./sshkey.sh

简单测试

向默认的inventory文件/etc/ansible/hosts中添加上几个被管节点清单。

[test]## ansible_python_interpreter指定python解释器版本192.168.246.187 ansible_python_interpreter=/usr/local/python3/bin/python3192.168.246.188192.168.246.189

使用ping模块测试被管节点。能成功,说明ansible能控制该节点。

## 单独测试一台node主机ansible 192.168.246.187 -m ping192.168.246.187 | SUCCESS => {    "changed": false,    "ping": "pong"}
## 测试一个主机组ansible test -m ping192.168.246.188 | UNREACHABLE! => {    "changed": false,    "msg": "Failed to connect to the host via ssh: ssh: connect to host 192.168.246.188 port 22: No route to host",    "unreachable": true}192.168.246.189 | UNREACHABLE! => {    "changed": false,    "msg": "Failed to connect to the host via ssh: ssh: connect to host 192.168.246.189 port 22: No route to host",    "unreachable": true}192.168.246.187 | SUCCESS => {    "changed": false,    "ping": "pong"}

如果要指定非root用户运行ansible命令,则加上"--sudo"或"-s"来提升为sudo_user配置项所指定用户的权限。

ansible 192.168.246.187 -m ping -b --become-user=root --become-method=sudo

inventory

inventory用于定义ansible要管理的主机列表,可以定义单个主机和主机组。上面的/etc/ansible/hosts就是默认的inventory。下面展示了inventory常用的定义规则。

cat -n /etc/ansible/hosts 1 192.168.100.59:22 2 192.168.100.60 ansible_ssh_pass=123456 ansible_ssh_port=22 3 [nginx] 4 192.168.100.5[7:9] 5 [nginx:vars] 6 ansible_ssh_pass='123456' 7 [webservers:children] 8 nginx

第一行和第二行单独定义主机,第一行带上了连接被管节点的端口,第二行带上了单独传递给ssh的参数,分别是ssh连接时的登录远程用户的密码参数和ssh的连接端口。

第三行和第四行定义的是nginx主机组,该组中包含了192.168.100.57 到59这3台主机。还支持字母的扩展,如"web[a- d]"。

第五行和第六行定义了要传递给nginx主机组的变量。若定义为"[all:vars]"或"[*:vars]"则表示传递给所有主机的变 量。

第七和第八行定义了一个新的主机组webservers,改组的组成员有nginx组。

可以指定多个inventory配置文件,只需在ansible的配置文件如/etc/ansible/ansible.cfg中将inventory指令设置为 对应的文件或目录即可,如果是目录,那么此目录下的所有文件都是inventory文件。

inventory文件中可以使用一些内置变量,绝大多数ansible的连接和权限变量都可以在此使用,见ansible命令解释。常见的有:

(1)ansible_ssh_host : ansible使用ssh要连接的主机。

(2)ansible_ssh_port : ssh的端口。默认为22。

(3)ansible_ssh_user : ssh登录的用户名。默认为root。

(4)ansible_ssh_pass : ssh登录远程用户时的认证密码。

(5)ansible_ssh_private_key_file : ssh登录远程用户时的认证私钥。

(6)ansible_connection : 使用何种模式连接到远程主机。默认值为smart(智能),表示当本地ssh支持持久连接(controlpersist)时采用ssh连接,否则采用python的paramiko ssh连接。

(7)ansible_shell_type : 指定远程主机执行命令时的shell解析器,默认为sh(不是bash,它们是有区别的,也不是全路径)。

(8)ansible_python_interpreter : 远程主机上的python解释器路径。默认为/usr/bin/python。

(9)ansible_*_interpreter : 使用什么解释器。例如,sh、bash、awk、sed、expect、ruby等等。

其中有几个参数可以在配置文件ans ible.cf g中指定,但指定的指令不太一样,以下是对应的配置项:

(1)remote_port: 对应于ansible_ssh_port。

(2)remote_user: 对应于ansible_ssh_user。

(3)private_key_f ile: 对应于ansible_ssh_private_key_f ile。

(4)excutable: 对应于ansible_shell_type。但有一点不一样,excutable必须指定全路径,而后者只需指定 basename。

如果定义了"ansible_ssh_host",那么其前面的主机名就称为别名。例如,以下inventory文件中nginx就是一个别名,真正连接的对象是192.168.246.187。/etc/ansible/hosts如下:

[test]nginx ansible_ssh_host=192.168.246.187#192.168.246.187192.168.246.188192.168.246.189[test:vars]ansible_ssh_private_key_file=/root/.ssh/rsa_back/id_rsaansible_python_interpreter=/usr/local/python3/bin/python3

执行ansible:

ansible test -m pingnginx | SUCCESS => {    "changed": false,    "ping": "pong"}192.168.246.188 | UNREACHABLE! => {    "changed": false,    "msg": "Failed to connect to the host via ssh: ssh: connect to host 192.168.246.188 port 22: No route to host",    "unreachable": true}192.168.246.189 | UNREACHABLE! => {    "changed": false,    "msg": "Failed to connect to the host via ssh: ssh: connect to host 192.168.246.189 port 22: No route to host",    "unreachable": true}

手动指定inventory主机清单文件路径:

ansible test -i /tmp/inventory_file -m ping

说明

本博文是参考马龙帅大佬文章整理生成,属于博主读书笔记,如有侵权,请大佬与我联系,立删!

最后,感谢开源,拥抱开源~

配置 主机 文件 参数 用户 变量 环境 节点 命令 目录 管理 模块 端口 路径 检查 登录 就是 测试 解释 公钥 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 上海挚品互联网科技有限公司 新华互联网科技 宜安科技 互联网金融 上海亿帐通互联网科技 国外互联网科技网站 美国互联网前沿科技 互联网科技博主是什么意思 千方科技属于互联网企业吗 互联网科技公司有风险吗 洛阳昕诺飞互联网科技有限公司 恒生互联网科技业指数调整周期 合肥互联网科技公司公章图片 山东星卡互联网科技有限公司官网 中国新注册互联网科技 互联网金融运营模式中的金融科技 福仕德教育科技互联网 马化腾互联网科技教学 保山浩联互联网科技有限公司 东风日产互联网科技公司叫什么 前海云享互联网科技 互联网科技官网 科技互联网公司logo 广州凡科互联网科技 互联网 科技服务平台 西藏七维空间互联网科技有限公司 速维有品互联网信息科技(苏州)有限公司 互联网保险科技创业 互联网科技品牌 广东猫王互联网科技有限公司电话 互联网科技创新方面的资料
0