Ansible(安装、配置文件、命令行、常用模块)

文章目录

批量管理工具选型

工具 说明 缺点
xshell 不适应机器过多场景,需要连接后才能用
for+ssh/scp+密钥认证 密钥认证,免密码登录 scp传输文件/脚本 ssh远程执行命令或脚本 串行
saltstack 需要安装客户端
ansible 无客户端(密钥认证) 批量部署环境 python版本不要太旧 红帽的
Terraform 关注基础设施(云环境),一键创建100台云服务器,一键创建负载均衡,数据库产品

Ansbile特性

  • 模块化:调用特定的模块完成特定任务,支持自定义模块,可使用任何编程语言写模块

  • Paramiko(python对ssh的实现),PyYAML,Jinja2(模板语言)三个关键模块

  • 基于Python语言实现

  • 部署简单,基于python和SSH(默认已安装),agentless,无需代理不依赖PKI(无需ssl)安全,基于OpenSSH

  • 幂等性:一个任务执行1遍和执行n遍效果一样,不因重复执行带来意外情况,此特性非绝对

  • 支持playbook编排任务,YAML格式,编排任务,支持丰富的数据结构

  • 较强大的多层解决方案 role

Ansible架构

  • 先配置好密钥认证
  • 主机清单:通过主机清单(inventory)连接管理被控端
  • ansible-hoc:就是命令执行模块
  • playbook:使用playbook剧本(核心)
环境准备 主机名 ip
Ansible管理端 m01(核心数根据被控端的多少来定) 10.0.0.111/172.16.1.111
被管理端:其他所有机器 web01、web02、db01、nfs01、backup -

安装

python安装(pip)

shell 复制代码
#0.安装 Python3 版本的pip工具
yum install -y python3-pip

#1.将已安装的pip升级到最新版本
python3 -m pip install -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple --upgrade pip

#2.配置 pip 源(永久加速)
pip3 config set global.index-url https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple

#3.安装ansible
pip3 install  ansible
ansible --version

#4.配置ansible(pip安装默认不会创建主配置文件,需要自己设置)
mkdir -p /etc/ansible/ 
cat >/etc/ansible/ansible.cfg<<'EOF'
[defaults]
host_key_checking = False
deprecation_warnings = False
interpreter_python=/usr/bin/python3
[inventory]
[privilege_escalation]
[paramiko_connection]
[ssh_connection]
[persistent_connection]
[accelerate]
[selinux]
[colors]
[diff]
EOF

yum安装

shell 复制代码
#红帽系列安装
yum install -y epel-release
yum install -y ansible

测试是否能连接远程

连接Linux

Linux常用模块-官方文档

分发密钥可以写成脚本

shell 复制代码
#1.分发密钥
ssh-copy-id root@远程ip
#2.配置主机清单
cat > /etc/ansible/hosts <<EOF
[test]
10.0.0.103
EOF
#3.测试是否能连到远程主机,(回复pong即表示能连接)
ansible all -m ping

连接Windows

windows模块官方文档:windows模块官方文档

shell 复制代码
#1.管理机安装winrm模块
yum install python-winrm  #如果ansible是python3安装 python3-winrm
#或者
pip install  pywinrm       #如果ansible是python3安装   pip3 install pywinrm
#2.windows需要在cmd中输入
Enable-PSRemoting -Force
#3.配置主机清单
cat > /etc/ansible/hosts <<EOF
[win_servers]
IP ansible_user=账号 ansible_password=windows密码
[win_servers:vars]
ansible_connection="winrm"
ansible_port=5985
#5985 http
#5986 https
ansible_winrm_transport="ntlm"
ansible_winrm_server_cert_validation=ignore
EOF
#4.测试是否能连到远程主机,(回复pong即表示能连接)
ansible win_servers -m win_ping

命令行工具

ansible命令列表

ansible

ansible命令官方文档

选项 说明
-m 指定模块
-a 指定模块的参数
-i 指定清单主机路径或逗号分隔的主机列表。
-k 询问连接密码
-f 指定要使用的并行进程数(默认值=5)
-C,--check 不要进行任何更改,测试命令

ansible-doc

ansible-doc官方文档

ansible-doc命令用于查看Ansible模块的文档,可以了解模块的参数、用法和示例等信息。

选项 说明
-l 列出可用的模块
-s 模块可以使用的参数

ansible-config

ansible-config官方文档

ansible-config命令用于查看和修改Ansible的配置文件,即ansible.cfg。它提供了一种检查和修改Ansible配置选项的方便方式

选项 说明
list 列出并输出可用配置
view 显示当前配置文件
init 创建初始配置
dump 显示当前设置,如果指定,合并 ansible.cfg

ansible-galaxy

ansible-galaxy官方文档

ansible-galaxy命令是Ansible的一个用于管理和分享Ansible角色的工具。它提供了一组命令,用于搜索、安装、创建、删除和发布Ansible角色。

集合操作 说明
collection install 安装一个或多个集合
collection list 列出已安装的集合或角色
collection verify 将校验和与服务器上找到的集合和已安装的副本进行比较
collection publish 将集合发布到 Ansible Galaxy,需要发布集合 tarball 的路径
collection build 构建一个 Ansible Galaxy 集合项目,该项目可以存储在 Ansible Galaxy 等中央存储库中
collection init 创建符合 Galaxy 元数据格式的角色或集合的骨架框架。需要角色或集合名称。
collection download 将集合及其依赖项下载为离线安装的压缩包
角色(role)操作 说明
role init 创建符合 Galaxy 元数据格式的角色或集合的骨架框架
role remove 从本地系统中删除作为参数传递的角色列表
role delete 从 Ansible Galaxy 中删除角色
role list 列出已安装的集合或角色
role search 在 Ansible Galaxy 服务器上搜索角色
role import 用于将角色导入 Ansible Galaxy
role setup 从 Github 或 Travis 为 Ansible Galaxy 角色设置集成
role info 打印有关已安装角色的详细信息以及 Galaxy API 中可用的信息
role install 安装一个或多个角色

ansible-console

ansible-console官方文档

REPL 控制台,用于执行 Ansible 任务

交互命令 说明
cd [pattern] 更改主机/组
list 列出当前路径中的可用主机
list groups 当前路径中包含的列表组
help 显示命令或模块的文档
exit 退出ansible-console
! 强制 shell 模块而不是 ansible 模块 (!yum update -y)
forks 并发数,同时执行多少台
become_user 提权后执行任务的用户
remote_user SSH 初始登录用户

ansible-pull

ansible-pull官方文档

从 VCS 存储库中提取 playbook 并为本地主机执行它们

选项 说明
--check 不要进行任何更改
--full 做一个完整的克隆,而不是一个浅层的克隆

ansible-vault

ansible-vault 官方文档

Ansible 数据文件的加密/解密实用程序

选项操作 通俗说明
create 新建文件,在编辑器里写完后,自动用密钥加密保存
decrypt 用密钥解密已加密的文件(解密后得到原明文文件)
edit 编辑已加密的文件(自动先解密打开,编辑完保存时自动重新加密)
view 查看已加密的文件内容(临时解密显示,不修改原文件,看完后仍保持加密状态)
encrypt 用密钥加密指定的明文文件(加密后生成加密文件,原明文文件可保留或删除)
encrypt_string 用密钥加密一段字符串(直接输入字符串,返回加密后的结果,方便在配置中引用)
rekey 给已加密的文件换密钥(需要先用原密钥解密,再用新密钥重新加密)
shell 复制代码
#1.加密/etc/ansible/hosts文件
ansible-vault encrypt  /etc/ansible/hosts
##此时打开此文件是非人类可读状态
#2.解密/etc/ansible/hosts文件
ansible-vault decrypt  /etc/ansible/hosts

ansible-inventory

ansible-inventory官方文档

显示 Ansible 清单信息,默认情况下它使用清单脚本 JSON 格式

选项 说明
--list 输出所有主机信息
--graph 以树形结构可视化展示 inventory 中主机、组及组之间的层级关系
-i 指定清单主机路径或逗号分隔的主机列表

ansible-playbook

ansible-playbook官方文档

运行 Ansible playbook,在目标主机上执行定义的任务

选项 说明
--become-user <BECOME_USER> 以此用户身份运行作(默认=root)
--list-hosts 输出匹配主机的列表;不执行任何其他作
--list-tasks 列出将要执行的所有任务和TAGS
--step 一步一步:在运行前确认每个任务
--syntax-check 对 playbook 执行语法检查,但不执行它
-C 不要进行任何更改
-f 指定要使用的并行进程数(默认值 = 5)
-k 询问连接密码
-u 以此用户身份连接(默认=无)
-v -vv -vvv 显示过程
--start-at-task START_AT_TASK 从指定task开始执行,而非从头开始,START_AT_TASK为任务的
-t 仅运行使用这些值标记的播放和任务
--skip-tags 仅运行标记与这些值不匹配的播放和任务

Ansible相关文件

Ansible主配置文件

Ansible 的配置文件可以放在多个不同地方,优先级从高到低顺序如下

shell 复制代码
ANSIBLE_CONFIG #环境变量,注意此项用 ansible --version 看不到,但可以生效
./ansible.cfg   #当前目录下的ansible.cfg
~/.ansible.cfg #当前用户家目录下的.ansible.cfg
/etc/ansible/ansible.cfg  #系统默认配置文件

Ansible 的默认配置文件 /etc/ansible/ansible.cfg ,其中大部分的配置内容无需进行修改

shell 复制代码
[defaults]
#inventory     = /etc/ansible/hosts #主机列表配置文件
#library = /usr/share/my_modules/ #库文件存放目录
#remote_tmp = $HOME/.ansible/tmp #临时py命令文件存放在远程主机目录
#local_tmp     = $HOME/.ansible/tmp #本机的临时命令执行目录
#forks         = 5   #默认并发数
#sudo_user     = root #默认sudo 用户
#ask_sudo_pass = True #每次执行ansible命令是否询问ssh密码
#ask_pass     = True   
#remote_port   = 22
#host_key_checking = False     #检查对应服务器的host_key,建议取消此行注释,实现第一次连接自动信任目标主机
#log_path=/var/log/ansible.log #日志文件,建议启用
#module_name = command   #默认模块,可以修改为shell模块
host_key_checking = False
deprecation_warnings = False
interpreter_python=/usr/bin/python3
gathering=explicit
retry_files_enabled = True
retry_files_save_path = /ansible_retry/
#开启facts并设置redis缓存
#gathering = implicit
#fact_caching = redis
#fact_caching_connection = 172.16.1.51:6379,密码
[inventory]
[privilege_escalation] #普通用户提权配置
#become=True
#become_method=sudo
#become_user=root
#become_ask_pass=False
[paramiko_connection]
[ssh_connection]
[persistent_connection]
[accelerate]
[selinux]
[colors]
[diff]

范例:当前目录下的ansible配置文件优先生效

shell 复制代码
[root@m01 ~]# ansible --version
ansible [core 2.11.12] 
  config file = /etc/ansible/ansible.cfg  #注意该路径
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/lib/python3.7/site-packages/ansible
  ansible collection location = /root/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/local/bin/ansible
  python version = 3.7.9 (default, Jun 10 2022, 11:25:35) [GCC 7.3.0]
  jinja version = 3.1.6
  libyaml = True

主机清单

主机清单官方文档:主机清单官方文档

Ansible 主机清单(Inventory)是指 Ansible 用于管理和执行任务的主机列表。主机清单可以是一个文本文件,也可以是一个脚本或程序。在主机清单中,每个主机都有一个唯一的名称和一个或多个变量,用于指定主机的连接参数、主机组、主机状态等信息

Inventory的配置文件,想要修改的话要自动生成ansible.cfg配置文件才能修改,根据ansible.cfg优先级读取配置文件

shell 复制代码
/etc/ansible/hosts

在配置文件中修改 Inventory 文件的位置,如果你要修改到 /opt/ansible/hosts的话

shell 复制代码
inventory = /opt/ansible/hosts

利用参数-i传递主机清单配置文件

shell 复制代码
ansible-playbook -i /opt/ansible/hosts xxx.yaml

主机清单参数说明

主机清单参数说明-官方文档

shell 复制代码
ansible_host	指定主机的 IP 地址或主机名
ansible_port	指定 SSH 连接的端口号
ansible_user	指定 SSH 连接时使用的用户名
ansible_connection	指定连接方法,常见的有 ssh
ansible_ssh_pass	指定 SSH 连接时使用的密码
ansible_password  用于向主机进行身份验证的密码

远程主机分组

给远程主机分组,以便于在Playbook中使用

下面的文件中,展示了主机清单文件中最简单的分组方法,[ ]内是组名

shell 复制代码
cat > /etc/ansible/hosts <<EOF
[nfs01]
10.0.0.102
[by01]
10.0.0.110
[web01]
10.0.0.103
[web02]
10.0.0.104
[web03]
10.0.0.108
[web04]
10.0.0.109
EOF

分组也可以支持嵌套

shell 复制代码
[nfs01]
10.0.0.102
[by01]
10.0.0.110
[web]
10.0.0.10[3:4]
10.0.0.10[8:9]

设置连接参数

ansible可以在Inventory文件中指定主机的连接参数,包括连接方法、用户等。在Inventory中设置连接的参数如下,用空格分隔多个参数

例如:100台机器,100个密码不同如何搞?

shell 复制代码
[web]
10.0.0.103 ansible_user=root ansible_port=22 ansible_password=Abc@1234

常用模块(在命令行使用)

Linux常用模块-官方文档

debug

Ansible的debug模块用在命令中输出调试信息。它可以打印任何文本消息或变量的值

选项参数 选项解释
msg 参数用于输出文本消息。
var 参数用于输出变量的值。
shell 复制代码
#打印hello ansible
ansible all -m debug -a "msg=hello,ansible"
#打印变量
ansible all -m debug -a "var=name" -e "name=csq"

文件目录相关

file

用途:管理远程节点的文件 / 目录(创建、删除、权限、软链接等)

选项参数 选项解释
path 指定要操作的文件路径,可以是绝对路径或相对路径。
state 控制文件的状态,可选值包括[file、directory、hard、link、absent、touch],其中 file:(如果文件不存在不创建)确保路径指向一个普通文件,文件元数据和内容都可以设置。 directory:确保路径指向一个目录,权限和所有权都可以设置。 hard:确保硬链接的存在,可以指定原始文件和目标目录 link:确保符号链接存在,可以指定链接到的目标。 absent:确保路径不存在,被删除或无实际变化的文件不会报错。 touch:确保文件存在,如果不存在则创建之,如果存在则仅更改文件的时间戳。
owner 指定文件所有者的用户名或用户ID。
group 指定文件所属组的组名或组ID。
mode 指定文件或目录的权限,可以使用数字形式或符号形式表示。
src 用于创建符号链接或硬链接时指定原始文件的路径。
recurse 递归地设置目录内容上指定的文件属性。 默认为false
shell 复制代码
#创建目录/app/ansible
ansible all -m file -a "path=/app state=directory"
#创建文件/app/ansible/csq.txt
ansible all -m file -a "path=/app state=touch"
#删除/app/amsible(及其危险)
ansible all -m file -a "path=/app/ansible state=absent"
#创建文件或目录时同时修改权限,所有者,用户组等内容
ansible all -m file -a "path=/csq/upload/ mode=0700 owner=nobody group=nobody state=directory"
#创建软链接源文件/etc/hosts,目标/app/hosts
ansible all -m file -a "src=/etc/hosts path=/app/hosts state=link"
#递归修改权限
ansible all -m file -a "path=/app owner=nobody group=nobody recurse=true state=directory"

lineinfile

Ansible 中用于 处理文件中单行内容 的核心模块,主要用于在指定文件中查找、修改、添加或删除特定行,尤其适合修改配置文件中的单行配置项

选项 说明
path 指定目标文件的路径
regexp 用于匹配目标行的正则表达式 若匹配到行,会用 line 参数替换;若未匹配到,默认会追加添加 line
line 要写入文件的内容(替换匹配到的行,或在未匹配时添加的行)。
state 控制行的状态:present(默认,确保行存在)、absent(删除匹配 regexp 的行)。
backrefs regexp 匹配到行时才用 line 替换;若未匹配,不做任何操作(避免误添加) 默认为false
insertafter 当 regexp 未匹配到行时,指定将 line 添加到哪个行之后 EOF(默认,文件末尾)、BOF(文件开头) 或某行的正则(如 insertafter: '^server {' 表示添加到 server { 行之后)
insertbefore 与 insertafter 类似,指定将 line 添加到哪个行之前
backup 修改文件前会创建备份,默认为false
validate 修改文件后执行的验证命令(如校验配置文件语法),若命令失败则撤销修改 validate: 'nginx -t %s'(%s会自动替换目标文件路径)
create 如果指定,则如果文件不存在,则会创建该文件
mode 生成的 filesystem 对象应具有的权限

copy

模块将文件或目录结构从本地或远程计算机复制到远程计算机上的位置。

选项参数 选项解释
src 源文件路径(本地文件路径)
dest 目标文件路径
group 指定目标文件的属组
owner 指定目标文件的属主
mode 指定目标文件的权限(可以是数字也可以是字符)
backup 是否备份目标文件,默认为false
content 要写入目标文件的内容,可以是字符串或者文件内容
remote_src 告诉 Ansible "源文件在远程主机上",默认为false
shell 复制代码
#将本地主机/root/test1.sh 复制到/tmp/test2.sh,并设置属主为root属组为nobody,设置源文件备份
ansible web01 -m copy -a "src=/root/test1.sh dest=/tmp/test2.sh owner=root group=nobody backup=true"

#将远程主机的/root/test1.sh 复制到/tmp/test2.sh,并设置属主为root属组为root,设置源文件备份
ansible web01 -m copy -a "src=/root/test1.sh dest=/tmp/test2.sh owner=root group=nobody backup=true remote_src=true"

#将/tmp/test2.sh内容改为hostname(此操作是覆盖文件内容)
ansible web01 -m copy -a "dest=/tmp/test2.sh content=hostname"

unarchive

用于将压缩包(如 .tar.tar.gz.zip 等)解压到远程主机的指定目录,支持从本地控制机或远程主机获取源文件传到远程主机指定目录

选项 说明
src 归档文件的路径。
dest 解压到的远程主机目标目录(必须已存在,否则需先用 file 模块创建)
remote_src 定义 src 是否为远程主机的路径。默认为本地路径
mode 解压后文件 / 目录的权限(如 0644、0755)
owner 解压后文件 / 目录的所有者(用户名或 UID)
group 解压后文件 / 目录的所属组(组名或 GID)
validate_checksum 是否校验源文件的校验和(确保文件未被篡改)
extra_opts 传递给解压工具(如 tar、unzip)的额外参数(字符串或列表)
creates 若远程主机上存在该路径,则跳过解压操作
list_files 仅列出归档文件中的内容,不实际解压(返回 files 列表)。
exclude 解压时排除的文件 / 目录(仅对 tar 有效,需配合 extra_opts 使用)。
shell 复制代码
#将本地路径的指定压缩包解压到远程主机某个目录下
ansible web -m unarchive -a "src=bird.tar.gz dest=/app/" -i /etc/ansible/hosts

get_url

从指定的 URL,下载文件,保存到被控节点的目标路径,并可配置权限、校验文件完整性、处理认证等

选项 说明
url 要下载的文件的 URL
dest 文件在被控节点的保存路径 若为目录,需以 / 结尾,文件会保持原文件名; 若为文件路径,会直接保存为指定文件名)。
mode 下载后文件的权限(如 06440755),仅对文件有效
checksum 校验文件完整性,格式为 算法:校验值(如 sha256:abc123...)。 下载后会验证文件哈希,不匹配则失败。
force 是否强制重新下载,默认为false
shell 复制代码
#从远程主机上下载tomcat包,下载到/opt目录下
ansible web -m get_url -a "url=https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.112/bin/apache-tomcat-9.0.112.tar.gz dest=/opt/tomcat9.tar.gz"

命令相关

command

用途:在远程节点执行命令

注意:此命令不支持 $VARNAME < > | ; & 等,可能用shell模块实现

注意:此模块不具有幂等性

shell 复制代码
#查看远程主机组的主机名
[root@m01 ~]# ansible all -m command -a "hostname"
10.0.0.110 | CHANGED | rc=0 >>
by01
10.0.0.102 | CHANGED | rc=0 >>
nfs01
10.0.0.103 | CHANGED | rc=0 >>
web01
10.0.0.104 | CHANGED | rc=0 >>
web02
10.0.0.108 | CHANGED | rc=0 >>
web03
10.0.0.109 | CHANGED | rc=0 >>
web04
#在tmp下面创建test.txt(如果不指定模块默认就是command模块)
ansible all  -a "touch /tmp/test.txt"

shell

用途:在远程节点通过 shell

功能:和command相似,用shell执行命令,支持各种符号,比如:*,$, >

shell 复制代码
#统计nginx日志行数(使用管道)
ansible web -m shell -a "cat /var/log/nginx/access.log | wc -l"
#在/tmp下批量创建文件
ansible all -m shell -a "touch /tmp/{1..10}.txt"

脚本相关

script

用途:将本地脚本传输到远程节点并执行(远程节点需有脚本解释器,如 bash、python)

功能:在远程主机上运行ansible服务器上的脚本(无需执行权限)

shell 复制代码
#在远程主机执行test.sh脚本
ansible all -m script -a "/data/test.sh"

安装软件包相关

yum

用途:管理 RPM 系系统(CentOS、RHEL、Fedora 等)的软件包

选项参数 选项解释
name 要操作的RPM包的名称,可以是单个包的名称或者一个包的列表。
state 要执行的操作类型,可以是present(安装或更新)、absent(卸载)或latest(安装最新版本)。
enablerepo 要启用的仓库的名称或ID
disablerepo 要禁用的仓库的名称或ID
shell 复制代码
#远程主机安装nginx
ansible all -m yum -a "name=nginx state=present"

yum_repository

选项 说明
name 仓库的唯一标识(ID),对应配置文件中的 [name] 小节名
baseurl 仓库的基础 URL 地址(支持 HTTP/HTTPS/FTP/file 协议),多个 URL 用空格分隔
enabled 是否启用该仓库
gpgcheck 是否检查包的 GPG 签名
gpgkey GPG 公钥的 URL 或本地路径
file 仓库配置文件的名称(保存路径为 /etc/yum.repos.d/<file>.repo
state 仓库的状态(present 创建 / 更新仓库,absent 删除仓库)

apt

Debian/Ubuntu 系列操作系统 (使用 apt 包管理器)设计的软件包管理模块,用于实现软件包的安装、卸载、更新、升级等操作,支持幂等性(重复执行无副作用)

选项 说明
name
state 软件包的目标状态: present(默认):确保包安装(不升级已安装的包) absent:确保包卸载 latest:确保包安装且升级到最新版本 fixed:修复依赖问题(类似 apt --fix-broken
update_cache 是否更新软件包缓存(等效于 apt update)默认是不更新缓存

apt_key

选项 说明
url 从中检索密钥的 URL(默认将密钥保存在/etc/apt/trusted.gpg.d/)
keyring 密钥文件的存储路径,默认是在
state 确保密钥存在(已添加)或不存在(已吊销),默认present

apt_repository

选项 说明
filename 设置 sources.list.d 中源列表文件的名称。默认为基于仓库源 URL 的文件名。 比如:/etc/apt/sources.list.d/nginx.list 写filename: nginx即可
repo 仓库的源字符串,需用引号引起来
update_cache 更改后运行缓存更新
state 源字符串状态"absent" "present"

用户相关

user

用途:管理远程节点的系统用户(创建、删除、修改属性等)

选项参数 选项解释
append 如果是yes,将用户添加到指定组中
name 指定用户名,必需参数。
comment 用户的注释。
uid 用户ID。
group 用户所属组。
groups 用户所属的附加组。
home 用户的主目录路径。
shell 用户的默认shell程序路径。
password 用户的密码(加密后的)
generate_ssh_key 如果设置为true,Ansible会为用户生成SSH密钥。
ssh_key_bits 生成SSH密钥时,指定密钥位数。
remove 如果设置为yes,则删除用户
force 是否强制删除用户,默认为false
move_home 是否移动用户的主目录
state 用户的状态,可以是present(创建)、absent(删除)或locked(锁定)。
system 创建账号时,将其设置为true会将用户设置为系统帐户
shell 复制代码
#创建csq用户,uid 9999 gid 9999 创建家目录 添加用户注释为usertest 设置用户的命令解释器为/bin/bash
#设置用户的密码为Abc@1234csq
#先创建指定用户组
ansible web01 -m group -a "name=csq gid=9999"
#再创建用户
ansible web01 -m user -a "name=csq group=csq uid=9999 home=/home/csq shell=/bin/bash password={{ 'Abc@1234csq' | password_hash('sha512','ashjkdjkb') }} state=present"

group

用途:管理远程节点的用户组(创建、删除、修改 GID 等)

参数 说明
name 组名(必填,唯一标识)。
state 状态:present(创建 / 保留组,默认)、absent(删除组)。
gid 组 GID(需唯一,如 2001)。
system 是否为系统组(yes/no,系统组 GID 通常小于 1000)。
shell 复制代码
#创建指定gid的用户组
ansible web01 -m group -a "name=csq gid=9999"

hostname

用于 管理远程主机的主机名 的专用模块

选项 说明
name 主机名
use 使用哪种策略来更新主机名 对于 RHEL/EL/CentOS 7+,应指定"systemd"。较旧的发行版应使用"redhat"

服务相关

systemd

用途:管理 systemd 服务(启动、停止、设置开机自启等,仅支持 systemd 系统)

参数 说明
name 服务名(必填,如 nginx、sshd,需与 systemd unit 文件名一致)。
state 服务状态:- started:启动服务;- stopped:停止服务;- restarted:重启服务;- reloaded:重载配置(不中断服务)。
enabled 是否开机自启:yes(启用)、no(禁用)。
daemon_reload 若服务 unit 文件更新(如新增 / 修改配置),需重载 systemd 守护进程(yes/no,默认 no)。
masked 是否屏蔽服务(禁止启动,比禁用更严格,yes/no,masked=yes后无法启动,需 masked=no 解除)。
shell 复制代码
#设置远程主机nginx服务开机自启并开启
ansible all -m systemd -a "name=nginx state=started enabled=true"

定时任务

cron

选项 说明
name 任务的唯一标识(必填),用于区分不同 cron 任务,修改 / 删除时依赖此名称
state 任务状态:present(创建 / 更新,默认)、absent(删除)。
user 指定 cron 任务所属的用户(默认当前执行用户)
job 要执行的命令或脚本(创建任务时必填)。
minute 分钟(0-59,*表示所有,*/n 表示每隔 n 分钟)。
hour 小时(0-23)。
day 日(1-31)
month 月(1-12 )
weekday 周(0-6 ,0 为周日)
special_time 特殊时间(覆盖分时日月周参数), 可选值:reboot(重启时)、 yearly(每年)、 <br />monthly(每月)、 weekly(每周)、 daily(每天)、 hourly(每小时)
disabled 是否禁用任务(yes/no,默认no),禁用后任务前会加#注释。

mysql相关

mysql创建库

参数 说明
login_user 用于登录 MySQL 的用户名(需具备操作数据库的权限,如 root 或其他管理员用户)。
login_password 登录用户对应的密码,用于 MySQL 身份认证(若用户无密码可省略)。
login_host MySQL 服务器的主机地址(默认值为localhost,远程连接时需指定 IP 或域名)。
login_port MySQL 服务监听的端口号(默认值为3306,若修改过默认端口需手动指定)。
charset 数据库的字符集(如utf8mb4),用于指定数据库存储数据时的字符编码规则。
state 数据库的目标状态:present(确保存在,不存在则创建)、absent(确保不存在,存在则删除)import(导入数据库操作)
name 要操作的数据库名称(唯一标识,如app_db,是创建 / 删除数据库的核心参数)。
target 远程主机上的SQL脚本路径

mysql创建用户

参数 说明
login_user 用于登录 MySQL 的管理员用户名(需具备用户管理权限,如 root),用于执行创建 / 修改 / 删除用户的操作。
login_password 登录 MySQL 的管理员对应的密码,用于身份认证(若管理员无密码可省略)。
login_host MySQL 服务器的主机地址(默认localhost,远程连接时需指定 IP 或域名)。
login_port MySQL 服务监听的端口号(默认3306,若修改过默认端口需手动指定)。
state 目标用户的状态:present(确保用户存在,不存在则创建;存在则更新密码 / 权限)、absent(确保用户不存在,存在则删除)。
name 要操作的目标用户名(如xzs),是创建 / 修改 / 删除用户的核心标识。
password 目标用户(name指定的用户)的登录密码,用于设置或更新该用户的认证密码。
priv 授予目标用户的权限,格式为 "数据库.表: 权限 1, 权限 2,..."(如app_db.*:SELECT,INSERT表示对app_db库所有表有查询和插入权限;*.*:ALL表示所有库表的全部权限)。

Ansible批量管理案例400台机器项目

核心约束

  • 机器类型混合:300 台 Linux、100 台 Windows;
  • 所有机器密码不同,无法通过统一认证方式管理。

关键规划与步骤

  1. 生成主机清单(核心)
    • 基于包含 "IP、用户名、密码、系统类型(linux/win)" 的源文件(如 all_pass.txt),通过 Shell 脚本批量生成主机清单:
      • 按系统类型分组:Linux 机器归入 [linux_servers] 组,Windows 归入 [win_servers] 组;
      • 每个主机条目明确指定认证信息:ansible_user(用户名)、ansible_password(密码)、ansible_port(端口,如 22);
      • 最终合并为 all_hosts 总清单。
  2. 主机名规划(可选)
    • 按 IP 范围对主机名分类(如 3-6 号 IP 为 lb,7-10 号为 web 等),需根据 IP 判断实现。
  3. 执行流程
    • 测试连通性:通过ansible -i all_hosts 组名 -m ping验证主机可达;
    • 执行部署剧本:针对 Linux 和 Windows 分别编写 Playbook,完成 Zabbix Agent 的安装、配置、启动。
相关推荐
a123560mh4 小时前
国产信创操作系统银河麒麟常见软件适配(MongoDB、 Redis、Nginx、Tomcat)
linux·redis·nginx·mongodb·tomcat·kylin
赖small强4 小时前
【Linux驱动开发】Linux MMC子系统技术分析报告 - 第二部分:协议实现与性能优化
linux·驱动开发·mmc
guygg884 小时前
Linux服务器上安装配置GitLab
linux·运维·gitlab
百***35514 小时前
Linux(CentOS)安装 Nginx
linux·nginx·centos
tzhou644525 小时前
Linux文本处理工具:cut、sort、uniq、tr
linux·运维·服务器
顾安r5 小时前
11.19 脚本 最小web控制linux/termux
linux·服务器·css·flask
程序媛_MISS_zhang_01105 小时前
vant-ui中List 组件可以与 PullRefresh 组件结合使用,实现下拉刷新的效果
java·linux·ui
dragoooon346 小时前
[Linux网络——Lesson2.socket套接字 && 简易UDP网络程序]
linux·网络·udp
大聪明-PLUS6 小时前
编程语言保证是安全软件开发的基础
linux·嵌入式·arm·smarc
清风一徐6 小时前
K8S环境中通过prometheus实现flink服务监控并给flink设置服务监测自动重启
linux·运维·云原生·容器·flink·kubernetes·prometheus