Ansible部署及常用模块使用

一、前期准备

1.准备三台服务器(本次环境使用的是Rokey_linux_10)

被管理端: 192.168.199.128
管理端: 192.168.199.129 # ansible 只需要在管理端安装
被管理端: 192.168.199.130

二、修改主机名并在/etc/hosts里面配置

#192.168.199.128 
hostnamectl set-hostname ansible-1
#192.168.199.129 
hostnamectl set-hostname ansible
#192.168.199.130 
hostnamectl set-hostname ansible-2
#三台都配置
vim  /etc/hosts

192.168.199.128 ansible-1
192.168.199.129 ansible
192.168.199.130 ansible-2

三、管理端安装Ansible

#安装epel源
yum install -y epel-release
#安装Ansible
dnf install -y ansible-core
#查看是否安装成功
cd /etc/ansible/
ls   #目录下有ansible.cfg  hosts  roles

四、编辑ansible配置

1.编辑hosts

cd /etc/hosts
vim hosts

[webservers]
ansible-1
ansible-2
#如果有db的话可以配置,填IP或者主机名
[dbservers] 
#192.168.199.128

2.常用内置连接变量(inventory )

ansible_host 被控机 IP / 主机名

ansible_userSSH 登录用户名

ansible_passwordSSH 密码(不推荐生产)

ansible_portSSH 端口,默认 22

ansible_ssh_private_key_file 私钥文件路径

示例:

[webservers] 
192.168.226.14 ansible_user=root ansible_port=22 ansible_ssh_private_key_file=/root/id_rsa

3.配置密钥 对验证

#在管理端操作
ssh-keygen -t rsa

ssh-copy-id root@192.168.199.128

ssh-copy-id root@192.168.199.130

五、ansible 命令行模块

格式:ansible <组名> -m <模块> -a <参数列表>

查看所有已安装模块

#按q退出
ansible-doc -l

1.command 模块

(1)作用

在远程主机执行命令,不支持管道,重定向等shell的特性,直接调用二进制程序,不经过shell 解释器

(2)列出指定模块的描述信息和操作动作

ansible-doc -s command
 command:
      argv:       #把命令以列表形式传入,不与cmd一起用      
      chdir:      #执行命令前,先切换到指定目录          
      cmd:        #要执行的命令字符串           
      creates:    #如果文件已经存在,这条任务不执行           
      expand_argument_vars:   #默认true,自动解析 $HOME、$PATH 这类系统环境变量    
      free_form:  #直接写命令字符串        
      removes:    #如果文件已经存在,这条任务执行          
      stdin:      #直接给命令传入标准输入内容          
      stdin_add_newline:   #默认 true,会在 stdin 内容末尾自动加换行  
      strip_empty_ends:     #默认 true,自动删掉输出 stdout/stderr 末尾多余空行 

(3)一些命令使用

*#指定 ip 执行 date*
 ansible 192.168.199.128 -m command -a 'date'
 #指定组执行 date
 ansible webservers -m command -a 'date'

image-20260629143005597

#all 代表所有 hosts 主机
ansible all -m command -a 'date'
#如省略 -m 模块,则默认运行 command 模块
ansible all -a 'date'
#查看所有被管理的服务器的用户有哪些
ansible all -m command -a "chdir=/home  ls ./"
#查看opt下面的1.txt
ansible all -m command -a "creates=/opt/1.txt cat 1.txt"
ansible all -m command -a "removes=/opt/1.txt cat 1.txt"

image-20260629142930486

2.shell 模块

(1)作用:

在远程主机执行命令,相当于调用远程主机的shell进程,然后在该shell下打开一个子shell运行命令(支持管道符号等功能)

(2)列出指定模块的描述信息和操作动作

#跟command模块的参数差不多
ansible-doc -s shell

(3)一些命令使用

批量修改密码
ansible webservers -m shell -a 'echo Xr520520@ | passwd --stdin xiang'

image-20260629144029384

#查看IP地址
ansible webservers -m shell -a 'echo $(ifconfig ens160 | awk "NR==2 {print $2}") | cut -d " " -f2'
5
ansible webservers -m shell -a 'echo $(ifconfig ens160 | awk "NR==2 {print \$2}")'

3.cron 模块

(1)作用:

在远程主机定义任务计划。其中有两种状态(state):present表示添加(可以省略),absent表示移除,批量管理 Linux 定时任务

(2)列出指定模块的描述信息和操作动作

ansible-doc -s cron
 cron:
      backup:          #true:修改 crontab 前自动备份原文件      
      cron_file:           #单独管理 `/etc/cron.d/` 下独立定时文件*                   
      day:                  #每月几号,1~31
      disabled:         #仅 state=present 生效;true 代表注释掉这条定时任务 
      env:               
      hour:                #小时,0~23,`2` 凌晨 2 点、`*/2` 每 2 小时
      insertafter:         
      insertbefore:       
      job:                     #定时要执行的命令,不能带换行(state=present 时必填)
      minute:               #分钟,0~59,`*/5` 每 5 分钟、`10` 第 10 分、`*` 每分钟
      month:                #月份,1~12
      name:                 #定时任务的唯一标识 / 注释名称(必填)
      special_time:      #快捷内置定时(不用写分时分日月周),可选值:`hourly`每小时、`daily`每天、`weekly`每周、`monthly`每月、`reboot`开机执行   
      state:               #`present`:确保这条定时任务存在(新增 / 修改)

                              #`absent`:删除这条定时任务     

      user:             #操作哪个用户的定时任务,默认root
      weekday:             #星期,0 = 周日~6 = 周六


(3)一些命令的使用

#添加计划
ansible webservers -m cron -a 'minute="*/1" job="/bin/echo helloworld" name="test crontab"'
#查看计划
ansible webservers -a 'crontab -l'
#移除计划任务,假如该计划任务没有取名字,name=None即可
ansible webservers -m cron -a 'name="test crontab" state=absent'	
ansible webservers -a 'crontab -l'

4.user模块

(1)作用

用户管理模块

(2)列出指定模块的描述信息和操作动作

ansible-doc -s user

comment 用户注释 / 描述

shell 指定登录 shell,

home自定义家目录路径,默认 /home/用户名

create_home默认 true,创建用户时自动生成家目录;

move_home搭配 home使用,修改用户家目录时,把旧目录文件迁移到新路径。

uid手动指定用户 UID,数字唯一。

systemtrue 创建系统用户,UID 偏小、不自动创建家目录、无登录 shell,用于进程服务(nginx/mysql)。

skeleton自定义家目录模板目录,需要 create_home=true

group指定主组(一个用户只能有一个主组)。

groups附加附属组,多个用逗号隔开 groups=wheel,nginx

append

false(默认):用户只保留 groups 里的组,清空其他附属组

true:在原有附属组基础上追加新组,不删除已有组

(3)一些命令的使用

#批量创建cyj用户
ansible webservers -m user -a 'name="cyj" state=present system="yes" uid=27  shell="/sbin/nologin" move_home=no '

#查看是否创建成功
 ansible webservers -m command -a 'tail /etc/passwd'

#批量删除任务
ansible webservers -m user -a 'name="cyj" state=absent'

5.group 模块

(1)作用:

用户组管理模块:用于批量管理 Linux 用户组,对应底层命令 groupadd / groupmod / groupdel

(2)列出指定模块的描述信息和操作动作

ansible-doc -s group

name: 要操作的组名称,唯一标识

state: present:确保组存在(不存在则创建,存在则修改属性)

absent:删除该用户组

gid: 手动指定组 ID(GID),数字

system: yes 代表创建系统组

force: 仅删除组时生效(state=absent),普通情况下,如果该组是某个用户的主组groupdel 会报错删不掉;设置 force=yes 强制删除,等同于 groupdel --force

local: 集中认证环境(LDAP 等)专用,强制操作本地 /etc/group 本地组,使用 lgroupadd/lgroupdel,不操作远端统一账号组。

non_unique: 搭配 gid 使用,允许给多个组设置同一个 GID(GID 重复);macOS、BusyBox 不支持该参数。

(3)一些命令的使用

ansible webservers -m group -a 'name=nginx gid=27 system=yes'
ansible webservers -a 'tail /etc/group'
ansible webservers -m user -a 'name="xiang" system=yes uid=27 group=nginx'
ansible webservers -a 'tail /etc/passwd'
ansible webservers -a 'id xiang'   

6.copy模块

(1)作用:用于复制指定主机文件到远程主机

(2)列出指定模块的描述信息和操作动作

ansible-doc -s copy

dest:指出复制文件的目标及位置,使用绝对路径,如果是源目录,指目标也要是目录,如果目标文件已经存在会覆盖原有的内容
src:指出源文件的路径,可以使用相对路径或绝对路径,支持直接指定目录,如果源是目录则目标也要是目录
mode:指出复制时,目标文件的权限
owner:指出复制时,目标文件的属主
group:指出复制时,目标文件的属组
content:指出复制到目标主机上的内容,不能与src一起使用 (如果文件存在,将覆盖原有内容)

(3)一些命令使用

ansible webservers -m copy -a "src=/opt/xiang.txt dest=/opt/xiang.txt group=nginx mode=664 owner=root"
ansible webservers -a 'ls -l /opt'
ansible webservers -a 'cat /opt/xiang.txt'
ansible webservers -m copy -a 'content=xiangbi dest=/opt/xiang.txt'
ansible webservers -a 'cat /opt/xiang.txt'

7.file模块

(1)作用:创建 / 删除文件、目录、软链接,修改权限属主

(2)列出指定模块的描述信息和操作动作

ansible-doc -s file

path :指定要操作的文件 / 目录 / 软链接路径 (必填)

state: 决定你要创建 / 删除什么,最关键参数:

​ touch:创建空文件(不存在则新建,存在则更新时间戳)

​ directory:创建文件夹(不存在自动递归创建)

​ link:创建软链接,必须搭配 src 参数

​ hard:创建硬链接

​ absent:删除文件 / 目录 / 链接(递归删除目录里所有内容)

​ file:确保路径是普通文件,不存在会报错

owner:设置文件 / 目录所属用户(root、xiang 等)

group:设置文件 / 目录所属组

mode:设置权限,数字权限(644、755、777),推荐加引号 "0644" 避免进制问题

src:仅 state=link / hard 时使用:软 / 硬链接的源文件路径

force创建软链接时使用:

  • force=yes:如果目标路径已存在,强制覆盖旧链接 / 文件
  • 默认 no,存在则报错

(3)一些命令

#创建空文件
ansible all -m file -a "path=/opt/test.txt state=touch mode=644"
#创建软链接
ansible all -m file -a "path=/opt/soft.link state=link src=/opt/test.txt force=yes"
#删除文件
ansible webservers -m file -a "path=/opt/test state=absent"

8.yum 模块

(1)作用:在远程主机上安装与卸载软件包

(2)列出指定模块的描述信息和操作动作

ansible-doc -s yum

name:(必填)指定软件包名称,支持单个包、多个包(逗号分隔)、包版本、组包。

state:控制安装 / 卸载状态

present(默认)安装软件,已存在则不操作

latest安装 / 升级到最新版本

absent卸载软件

removed等同于 absent,卸载

enablerepo:临时启用指定 yum 源仓库安装包,多个仓库逗号分隔。

disablerepo:临时禁用某个 yum 源,避免冲突。

download_only:yes:只下载安装包,不安装,包默认存 /var/cache/yum

download_dir:搭配 download_only,自定义 rpm 下载保存目录。

exclude:升级时排除指定包,防止更新。

list只查询包信息,不安装 / 卸载,可选值:

  • installed:列出已安装包
  • available:列出可安装包
  • updates:列出可升级包

(3)一些使用命令

ansible webservers -m yum -a 'name=tree'					
#安装nginx
ansible webservers -m yum -a 'name=nginx state=present'
#卸载nginx
ansible webservers -m yum -a 'name=nginx state=absent'		

9.systemd 模块

(1)作用:

用于管理远程主机上的管理服务的运行状态

(2)列出指定模块的描述信息和操作动作

ansible-doc -s systemd

name:(必填)服务名称,和系统 systemctl 服务名一致,不用加 .service。示例:name=nginxname=firewalld

masked:是否屏蔽服务(mask 后无法手动启动):

  • yes:mask 屏蔽服务
  • no:unmask 解除屏蔽

enabled:控制开机是否自启:

  • yes:设置开机自动启动
  • no:关闭开机自启

state:控制服务运行状态,可选值:

  • started:启动服务,已运行则不操作
  • stopped:停止服务
  • restarted:重启服务(不管当前状态,强制重启)
  • reloaded:重载配置(不中断服务,仅加载新配置,服务必须支持 reload)

daemon_reload:yes:执行 systemctl daemon-reload,重新加载 systemd 单元配置

场景:修改了 /usr/lib/systemd/system/ 自定义服务文件后必须执行。

force:配合 masked=yes,强制屏蔽服务。

runlevel:如果设定了enabled开机自启去,则要定义在哪些运行目标下自启动

(3)一些使用命令

#查看web服务器httpd运行状态
ansible webservers -a 'systemctl status httpd'			
#启动httpd服务,设置开机自启
ansible webservers -m service -a 'enabled=yes name=httpd state=started'	
#修改配置后重载服务
ansible webservers -m systemd -a "name=nginx state=reloaded daemon_reload=no"

10.setup 模块

(1)作用:

facts 组件是用来收集被管理节点信息的,使用 setup 模块可以获取这些信息

(2)列出指定模块的描述信息和操作动作

ansible-doc -s setup

filter:过滤只输出指定信息,支持通配符 *

gather_subset :采集子集(控制采集范围,提速)控制收集哪一类信息,多个用逗号分隔,常用值:

  • all:采集全部信息(默认)
  • min:最小基础信息(主机名、系统版本)
  • hardware:硬件信息(CPU、内存、磁盘)
  • network:网卡、IP 地址
  • virtual:虚拟化信息(物理机 / 虚拟机、云厂商)
  • !hardware:排除硬件信息(! 代表不采集)

(3)一些常用命令

ansible webservers -m setup				#获取主机的facts信息

ansible dbservers -m setup -a 'filter=*ipv4'    #使用filter可以筛选指定的facts信息
posted @ 2026-06-29 17:21  bx_xr  阅读(4)  评论(0)    收藏  举报