ansible入门

一、ansible简介

1、ansible 是什么?

ansible是目前最受运维欢迎的自动化运维工具,基于Python开发,集合了众多运维工具(SaltStack puppet、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。

ansible是基于 paramiko 开发的,并且基于模块化工作,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。ansible不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的。ansible目前已经已经被红帽官方收购,是自动化运维工具中大家认可度最高的,并且上手容易,学习简单。是每位运维工程师必须掌握的技能之一。

2、ansible 特点

  1. 部署简单,只需在主控端部署Ansible环境,被控端无需做任何操作;
  2. 默认使用SSH协议对设备进行管理;
  3. 有大量常规运维操作模块,可实现日常绝大部分操作;
  4. 配置简单、功能强大、扩展性强;
  5. 支持API及自定义模块,可通过Python轻松扩展;
  6. 通过Playbooks来定制强大的配置、状态管理;
  7. 轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可;
  8. 提供一个功能强大、操作性强的Web管理界面和REST API接口------AWX平台。

二、ansible配置

yum安装

我们需要先安装一个epel-release包,然后再安装我们的 ansible 即可。

管理机器和被管理机器都要安装

bash 复制代码
    yum install epel-release -y
    yum install ansible -y

	#可通过来检测安装是否成功
	ansible --version

三、master配置

bash 复制代码
# 默认清单位置
# 可自己定义组和ip
# [组名称] 下面跟被slave IP
[root@server ~]# vim /etc/ansible/hosts
    [web]
    192.168.37.122
    192.168.37.133

# 更改配置 
[root@server ~]# vim /etc/ansible/ansible.cfg
    inventory = /etc/ansible/hosts #这个参数表示资源清单inventory文件的位置
    library = /usr/share/ansible   #指向存放Ansible模块的目录,支持多个目录方式,只要用冒号(:)隔开就可以
    forks = 5       #并发连接数,默认为5
    sudo_user = root        #设置默认执行命令的用户
    remote_port = 22        #指定连接被管节点的管理端口,默认为22端口,建议修改,能够更加安全
    host_key_checking = False #设置是否检查SSH主机的密钥,值为True/False。关闭后第一次连接不会提示配置实例
    timeout = 60        #设置SSH连接的超时时间,单位为秒
    log_path = /var/log/ansible.log     #指定一个存储ansible日志的文件(默认不记录日志)

四、配置公私钥

bash 复制代码
# -t 指定算法为rsa
[root@localhost ansible]# ssh-keygen -t rsa
# 查看
[root@localhost ~]# ls -a
.   anaconda-ks.cfg  .bash_history  .bash_profile  .cache  .ssh     .viminfo
..  .ansible         .bash_logout   .bashrc        .cshrc  .tcshrc  .vscode-server
[root@localhost ~]# ls .ssh
id_rsa  id_rsa.pub  known_hosts

# 向被管理节点分发私钥
[root@localhost ~]# ssh-copy-id root@192.168.29.xxx
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '192.168.29.146 (192.168.29.146)' can't be established.
ECDSA key fingerprint is SHA256:rR5lMFR1i9B7wXGtzpBk4P2VFx1E+HXw6fxf5BQJWZg.
ECDSA key fingerprint is MD5:dd:d1:08:19:b1:7d:7f:2d:a0:56:e0:f2:87:d5:c3:ea.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.29.146's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@192.168.29.xxx'"
and check to make sure that only the key(s) you wanted were added.

# 测试
[root@localhost ~]# ssh 'root@192.168.29.xxx'
Last login: Sat Sep  7 14:26:27 2024 from 192.168.29.1
[root@localhost ~]# exit
登出
Connection to 192.168.29.146 closed.

# 测试连通信
# web之前在清单中定义 也可以用测试某单个节点
# ansible all -i 192.168.29.146, -m ping 
# -i后是个list 如果是单个节点则需要结尾处加,
[root@localhost ~]# ansible web -m ping
192.168.29.146 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}

五、常用模块

bash 复制代码
ansible-doc     # 类似--help
ansible-doc -l              #获取全部模块的信息
ansible-doc -s MOD_NAME     #获取指定模块的使用帮助

command模块

在远程主机上执行命令,并将结果返回本主机。

bash 复制代码
# -m后跟 模块名
# -a 命令
# 例:
[root@localhost ~]# ansible web -m command -a 'echo hello'
192.168.29.146 | CHANGED | rc=0 >>
hello

shell模块

bash 复制代码
#过滤ip
[root@localhost ~]# ansible web -m command -a 'ip a | grep global noprefixroute '
192.168.29.146 | FAILED | rc=255 >>
Command "|" is unknown, try "ip address help".non-zero return code

#----失败了
#原因是在 Ansible 中,使用 command 模块时,某些复杂的 Shell 表达式和管道符(如 |)不能直接使用。command 模块是比较基础的模块,它只允许执行简单的命令,无法解析管道符和其他 Shell 特性。

# 使用 shell 模块来解决这个问题,因为它可以处理管道、重定向等 Shell 特性
# shell 模块允许你像在终端中一样使用 Shell 特性,因此你可以执行包含 |、>、&& 等操作符的命令。
[root@localhost ~]# ansible web -m shell -a 'ip a | grep "global noprefixroute"'
192.168.29.146 | CHANGED | rc=0 >>
    inet 192.168.29.146/24 brd 192.168.29.255 scope global noprefixroute dynamic ens33
    

script 模块

该模块用于将本机的脚本在被管理端的机器上运行

bash 复制代码
[root@localhost ~]# echo "touch /tmp/testscript" >/tmp/test_script.sh
[root@localhost ~]# cat /tmp/test_script.sh 
[root@localhost ~]# ansible web -m script -a '/tmp/test_script.sh'
192.168.29.146 | CHANGED => {
    "changed": true, 
    "rc": 0, 
    "stderr": "Shared connection to 192.168.29.146 closed.\r\n", 
    "stderr_lines": [
        "Shared connection to 192.168.29.146 closed."
    ], 
    "stdout": "", 
    "stdout_lines": []
}
[root@localhost ~]# ansible web -m shell -a "ls -l  /tmp/"
192.168.29.146 | CHANGED | rc=0 >>
总用量 648
......
-rw-r--r--. 1 root root      0 9月   7 15:44 testscript
drwx------. 2 yryr yryr      6 7月   3 09:50 tracker-extract-files.1000
drwx------. 2 root root      6 7月   3 09:49 vmware-root
-rw-------. 1 root root      0 7月   3 09:38 yum.log

copy 模块

bash 复制代码
src     #被复制到远程主机的本地文件。可以是绝对路径,也可以是相对路径。如果路径是一个目录,则会递归复制,用法类似于"rsync"
content  #用于替换"src",可以直接指定文件的值
dest      #必选项,将源文件复制到的远程主机的绝对路径
backup   #当文件内容发生改变后,在覆盖之前把源文件备份,备份文件包含时间信息
directory_mode    #递归设定目录的权限,默认为系统默认权限
force    #当目标主机包含该文件,但内容不同时,设为"yes",表示强制覆盖;设为"no",表示目标主机的目标位置不存在该文件才复制。默认为"yes"
others    #所有的 file 模块中的选项可以在这里使用

#复制到指定目录下
ansible web -m copy -a 'src=~/hello dest=/data/hello' 
# 复制时加权限
ansible web -m copy -a 'content="I am keer\n" dest=/data/name mode=666'
# 复制并备份
ansible web -m copy -a 'content="I am keerya\n" backup=yes dest=/data/name mode=666'

file 模块:

该模块主要用于设置文件的属性,比如创建文件、创建链接文件、删除文件等

bash 复制代码
force  #需要在两种情况下强制创建软链接,一种是源文件不存在,但之后会建立的情况下;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no
group  #定义文件/目录的属组。后面可以加上mode:定义文件/目录的权限
owner  #定义文件/目录的属主。后面必须跟上path:定义文件/目录的路径
recurse    #递归设置文件的属性,只对目录有效,后面跟上src:被链接的源文件路径,只应用于state=link的情况
path          #软链接时: 链接文件。 创建文件、目录是指定的路径[必须]
src            #链接时指定的源文件
state  #状态,有以下选项:
    directory:如果目录不存在,就创建目录
    file:即使文件不存在,也不会被创建
    link:创建软链接
    hard:创建硬链接
    touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间
    absent:删除目录、文件或者取消链接文件

例:
	创建目录
	ansible web -m file -a 'path=/data/app state=directory'
	创建链接文件
	ansible web -m file -a 'path=/data/bbb.jpg src=/data/aaa.jpg state=link'
	删除文件
	ansible web -m file -a 'path=/data/a state=absent'

fetch 模块

该模块用于从远程某主机获取(复制)文件到本地。

bash 复制代码
dest:用来存放文件的目录
src:在远程拉取的文件,并且必须是一个file,不能是目录
例:
 ansible web -m fetch -a 'src=/data/hello dest=/data' 

cron 模块:

管理cron计划任务的。

其使用的语法跟我们的crontab文件中的语法一致,同时,可以指定以下选项:

bash 复制代码
day=      	 #日应该运行的工作( 1-31, , /2, )
hour= 	    # 小时 ( 0-23, , /2, )
minute= 	#分钟( 0-59, , /2, )
month=	   # 月( 1-12, *, /2, )
weekday=       # 周 ( 0-6 for Sunday-Saturday,, )
job= 	      #指明运行的命令是什么
name=  	  #定时任务描述
reboot  	# 任务在重启时运行,不建议使用,建议使用special_time
special_time #特殊的时间范围,参数:reboot(重启时),annually(每年),monthly(每月),weekly(每周),daily(每天),hourly(每小时)
state 	   #指定状态,present表示添加定时任务,也是默认设置,absent表示删除定时任务
user 	     # 以哪个用户的身份执行

例:
添加计划任务
[root@server ~]# ansible web -m cron -a 'name="ntp update every 5 min" minute=*/5 job="/sbin/ntpdate 172.17.0.1 &> /dev/null"'

删除计划任务
ansible web -m shell -a 'crontab -l'

yum模块:

bash 复制代码
name=       #所安装的包的名称
state=    #present--->安装, latest--->安装最新的, absent---> 卸载软件。
update_cache  #强制更新yum的缓存
conf_file  #指定远程yum安装时所依赖的配置文件(安装本地已有的包)。
disable_pgp_check  #是否禁止GPG checking,只用于presentor latest。
disablerepo  #临时禁止使用yum库。 只用于安装或更新时。
enablerepo   #临时使用的yum库。只用于安装或更新时。

ansible web -m yum -a 'name=htop state=present'

yum_repository模块

bash 复制代码
name:必须参数,指定唯一的仓库ID,state为present或absent时需要设置name参数
baseurl:指定yum仓库repodata目录的URL,可以是多个,如果设置为多个,需要使用"metalink"和"mirrorlist"参数
enabled:使用此yum仓库
gpgcheck:是否对软件包执行gpg签名检查
gpgkey:gpg秘钥的URL
mode:权限设置,当设置为preserve时,文件将与源文件权限相同
file:用于设置仓库的配置文件名称,即设置".repo"配置文件的文件名前缀,在不使用此参数的情况下,默认以 name 参数的仓库ID作为".repo"配置文件的文件名前缀,同一个".repo" 配置文件中可以存在多个 yum 源
state:状态,默认的present为安装此yum仓库,absent为删除此yum仓库
description:设置仓库的注释信息
async:如果yum仓库支持并行,yum将并行下载软件包和元数据
bandwidth:与throttle参数一起使用,限制yum可用的网络带宽

# ansible gz22 -m yum_repository -a 'name="testrepo" state=present baseurl=http://mirrors.aliyun.com/centos/$releasever/centosplus/$basearch/ gpgcheck=no enabled=yes description="yum repo test"'

service 模块

该模块用于服务程序的管理。

其主要选项如下:

bash 复制代码
arguments #命令行提供额外的参数
enabled     #设置开机启动。
name= #服务名称
runlevel #开机启动的级别,一般不用指定。
sleep #在重启服务的过程中,是否等待。如在服务关闭以后等待2秒再启动。(定义在剧本中。)
state #有四种状态,分别为:started--->启动服务, stopped--->停止服务, restarted--->重启服务, reloaded--->重载配置
例
开启服务并设置自启动
ansible web -m service -a 'name=nginx state=started enabled=true' 
关闭服务
ansible web -m service -a 'name=nginx state=stopped'

user 模块

该模块主要是用来管理用户账号。

bash 复制代码
comment  # 用户的描述信息
createhome  # 是否创建家目录
force  # 在使用state=absent时, 行为与userdel --force一致.
group  # 指定基本组
groups  # 指定附加组,如果指定为(groups=)表示删除所有组
home      # 指定用户家目录
move_home  # 如果设置为home=时, 试图将用户主目录移动到指定的目录
name  # 指定用户名
non_unique  # 该选项允许改变非唯一的用户ID值
password  # 指定用户密码
remove  # 在使用state=absent时, 行为是与userdel --remove一致
shell  # 指定默认shell
state  # 设置帐号状态,不指定为创建,指定值为absent表示删除
system  # 当创建一个用户,设置这个用户是系统用户。这个设置不能更改现有用户
uid  # 指定用户的uid

添加一个用户并指定其 uid
ansible web -m user -a 'name=keer uid=11111'
删除用户
ansible web -m user -a 'name=keer state=absent'

group 模块

主要用于添加或删除组

bash 复制代码
gid=  #设置组的GID号
name=  #指定组的名称
state=  #指定组的状态,默认为创建,设置值为absent为删除
system=  #设置值为yes,表示创建为系统组

# 创建组
ansible web -m group -a 'name=sanguo gid=12222'
# 删除组
ansible web -m group -a 'name=sanguo state=absent'

setup 模块:

Ansible 的 setup 模块用于从远程主机收集系统的"facts",这些 facts 是目标系统的硬件和软件相关信息,例如操作系统、网络配置、磁盘、内存等

bash 复制代码
#例:
ansible web -m setup -a 'filter="*mem*"' --tree /tmp/facts

#-a 'filter="*mem*"': -a 是 setup 模块的参数部分,指定过滤器 filter="*mem*"。这里的 *mem* 是一个通配符模式,它表示只过滤包含 "mem" 字符串的 facts。具体来说,setup 模块会返回所有名称中包含 "mem" 的 facts,通常这些 facts 与内存(memory)相关。
#--tree /tmp/facts: 这是一个可选参数,它指定将收集到的 facts 存储到 /tmp/facts 目录下。Ansible 会为每台目标主机生成一个以主机名命名的 JSON 文件,包含该主机的相关 facts 信息。


#常用
# CPU 相关信息
#ansible_processor: 处理器信息
#ansible_processor_vcpus: 虚拟CPU数量
#ansible_processor_cores: 每个物理CPU的核心数
#ansible_processor_count: 物理CPU的数量
ansible web -m setup -a 'filter="*cpu*"'

# 磁盘相关信息
#ansible_devices: 磁盘设备信息
#ansible_mounts: 挂载点和文件系统信息
ansible web -m setup -a 'filter="*disk*"'

# 网络相关信息
ansible web -m setup -a 'filter="*net*"'

#操作系统相关信息
ansible web -m setup -a 'filter="*os*"'

#内核相关信息
ansible web -m setup -a 'filter="*kernel*"'

#内存交换区 (Swap) 相关信息
ansible web -m setup -a 'filter="*swap*"'

#所有网络接口及其详细信息
ansible web -m setup -a 'filter="*interface*"'

#时间和时区相关信息
ansible web -m setup -a 'filter="*time*"'

#文件系统相关信息
ansible web -m setup -a 'filter="*filesystem*"'

#主机名和主机信息
ansible web -m setup -a 'filter="*hostname*"'

#如果你不指定过滤器,setup 模块将默认收集主机的全部 facts。使用下面的命令可以收集所有
ansible web -m setup

get_url模块:

Ansible 的 get_url 模块用于从网络上下载文件到目标主机上。这个模块支持各种下载选项,包括设置下载超时、验证 SSL 证书、指定代理等。它非常适合在自动化脚本中获取远程资源或软件包。

bash 复制代码
dest:           指定将文件下载的绝对路径---必须
url:            文件的下载地址(网址)---必须
url_username:    用于http基本认证的用户名
url_password:   用于http基本认证的密码
validate_certs: 是否验证 SSL 证书。默认为 yes  validate_certs=no
owner: 指定属主
group: 指定属组
mode: 指定权限
proxy: 使用代理
headers:要添加到请求中的 HTTP 头部字段 headers={'Authorization': 'Bearer <token>'}
例:
ansible -i /etc/ansible/hosts  zabbix -m get_url -a "url=ftp://10.3.131.50/soft/wechant.py dest=/tmp"

stat 模块:

Ansible 的 stat 模块用于获取目标文件或目录的状态信息。它可以用来检查文件或目录是否存在、权限、大小等。以下是 stat 模块的功能、常用参数以及示例:

注意:

对于Windows目标,请改用win_stat模块

bash 复制代码
path:
描述:要检查的文件或目录的路径。
示例:path=/tmp/file.txt
get_md5:
描述:是否获取文件的 MD5 校验和。默认为 no。
示例:get_md5=yes

get_checksum:
描述:是否获取文件的校验和。默认为 no。
示例:get_checksum=yes

get_attributes:
描述:是否获取文件的属性。默认为 yes。
示例:get_attributes=no

follow:
描述:是否跟随符号链接。默认为 yes。
示例:follow=no

cacheable:
描述:是否缓存结果。默认为 yes。
示例:cacheable=no

例:
检查文件是否存在
ansible web -m stat -a "path=/tmp/file.txt"

{
    "ansible_facts": {
        "stat": {
            "exists": true,
            "isreg": true,
            "size": 1234,
            "uid": 1000,
            "gid": 1000,
            "mode": "0644",
            "mtime": 1632878287.0
        }
    }
}
解释:文件 /tmp/file.txt 存在,文件类型为普通文件,大小为 1234 字节,权限为 0644,最后修改时间为 1632878287

获取文件的 MD5 校验
ansible web -m ansible.builtin.stat -a "path=/tmp/file.txt get_md5=yes"

{
    "ansible_facts": {
        "stat": {
            "md5": "5d41402abc4b2a76b9719d911017c592",
            "exists": true,
            "isreg": true,
            "size": 1234
        }
    }
}

检查文件是否存在,并且获取权限
ansible web -m stat -a "path=/tmp/file.txt get_attributes=yes"

{
    "ansible_facts": {
        "stat": {
            "exists": true,
            "isreg": true,
            "mode": "0644",
            "uid": 1000,
            "gid": 1000
        }
    }
}

unarchive模块

Ansible 的 unarchive 模块用于解压缩文件。它支持多种压缩格式,包括 .tar, .tar.gz, .tar.bz2, .zip, .gz 等。该模块可以从本地或远程位置解压文件,并且支持解压到指定的目录。

bash 复制代码
src:
描述:要解压的源文件路径。可以是本地路径或远程 URL。
示例:src=/path/to/archive.tar.gz 或 src=http://example.com/archive.tar.gz

dest:
描述:解压后的目标目录。
示例:dest=/path/to/destination

remote_src:
描述:如果 src 是远程 URL,需要设置为 yes。默认为 no。
示例:remote_src=yes

creates:
描述:解压后的文件或目录路径,如果路径存在则跳过解压。
示例:creates=/path/to/destination/file

extra_opts:
描述:传递给解压程序的额外选项。例如,对于 unzip,可以使用此选项指定解压密码。
示例:extra_opts=['-q']

compress_type:
描述:指定压缩类型(例如:tar, zip)。如果不指定,Ansible 将尝试自动检测。
示例:compress_type=zip

force:
描述:是否强制解压,即使目标目录中已经存在文件。默认为 yes。
示例:force=no


解压本地的 .tar.gz 文件
ansible localhost -m unarchive -a "src=/path/to/archive.tar.gz dest=/path/to/destination"

从远程 URL 下载并解压 .zip 文件
ansible localhost -m unarchive -a "src=http://example.com/archive.zip dest=/path/to/destination remote_src=yes"

解压 .tar.gz 文件到指定目录,并使用 creates 跳过已存在的文件
ansible localhost -m unarchive -a "src=/path/to/archive.tar.gz dest=/path/to/destination creates=/path/to/destination/file"

解压 .tar.bz2 文件并使用额外选项
ansible localhost -m unarchive -a "src=/path/to/archive.tar.bz2 dest=/path/to/destination compress_type=tar extra_opts=['--bzip2']"

解压 .zip 文件,不覆盖已存在的文件
ansible localhost -m unarchive -a "src=/path/to/archive.zip dest=/path/to/destination force=no compress_type=zip"

archive模块

archive 模块是 Ansible 的一个功能模块,用于创建归档文件。这个模块可以用来打包文件和目录,并将其压缩成 .zip、.tar、.tar.gz、.tar.bz2、.tar.xz 等格式的归档文件。

主要功能

创建归档文件:可以将指定的文件和目录打包到一个归档文件中。

支持多种格式:支持多种归档格式,如 .tar, .tar.gz, .tar.bz2, .tar.xz, .zip。

支持压缩:除了打包文件,archive 模块还可以使用压缩算法来减小归档文件的大小。

bash 复制代码
path: 要归档的文件或目录的路径。
dest: 归档文件的目标路径及文件名。
format: 归档文件的格式。支持 tar, zip 等。默认是 tar.
compress_type: 仅在格式为 tar 时有效,指定压缩类型。支持 gz, bz2, xz。
exclude: 排除不需要的文件或目录的模式。
include: 包括的文件或目录的模式。

创建 .tar.gz 归档文件
ansible all -m archive -a 'path=/etc dest=/mnt/etc.tar.gz format=gz'
这个命令会将 /etc 目录压缩成一个 .tar.gz 文件,并保存在 /mnt/etc.tar.gz。

创建 .zip 归档文件
ansible all -m archive -a 'path=/home/user dest=/mnt/home.zip format=zip'

排除特定的文件和目录
ansible all -m archive -a 'path=/var dest=/mnt/var.tar.gz format=gz exclude="*.log, temp/"'
这个命令会将 /var 目录压缩成一个 .tar.gz 文件,并排除所有 .log 文件和 temp/ 目录。

包含特定的文件
ansible all -m archive -a 'path=/srv dest=/mnt/srv.tar.gz format=gz include="important_file.txt, important_directory/"'
这个命令会将 /srv 目录压缩成一个 .tar.gz 文件,并只包含 important_file.txt 和 important_directory/

设置归档文件的权限和所有者
ansible all -m archive -a 'path=/var/log dest=/mnt/logs.tar.gz format=gz owner=devops group=devops mode=0644'
这个命令会将 /var/log 目录压缩成一个 .tar.gz 文件,并将归档文件的所有者设置为 devops,组设置为 devops,权限设置为 0644。

如果同时使用 include 和 exclude,include 会优先,只有指定在 include 中的文件和目录会被压缩到归档中,而 exclude 用于排除不需要的内容。

确保指定的 include 和 exclude 的路径相对于 path 参数的路径。例如,如果 path 是 /srv,则 include 和 exclude 中的路径应相对于 /srv

SELINUX模块

用于管理 SELinux 状态。该模块可以用来设置 SELinux 的状态(如 enforcing、permissive 或 disabled),以及设置 SELinux 策略。下面是对 selinux 模块的总结,包括其功能、常用参数及示例用法。

selinux 模块功能

selinux 模块用于配置 SELinux 的状态和策略。这包括:

切换 SELinux 模式(enforcing、permissive、disabled)

设置 SELinux 策略

bash 复制代码
state: 设置 SELinux 的模式。可选值包括:
		enforcing: 强制执行 SELinux 策策
		permissive: 只记录违规,但不阻止
		disabled: 禁用 SELinux
policy: 设置 SELinux 策略(如 targeted 或 mls)。通常与 state 一起使用,指明策略类型。

设置 SELinux 为 Enforcing 模式并指定策略
ansible 192.168.20.23 -m selinux -a 'state=enforcing policy=targeted'
相关推荐
A小辣椒1 天前
TShark:Wireshark CLI 功能
linux
A小辣椒1 天前
TShark:基础知识
linux
AlfredZhao1 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao2 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334662 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪2 天前
linux 拷贝文件或目录到指定的位置
linux
大树883 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质3 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush43 天前
嵌入式linux学习记录十四、术语
linux·嵌入式