1.总结ansible常用的一些模块和基本的示例

以下是Ansible常用模块及其示例1. command 模块
作用
在远程主机上执行命令,默认不支持复杂的 Shell 特性(如管道、重定向等),相对更安全,适用于执行简单的系统命令。
主要参数及说明
cmd:必选参数,要在远程主机上执行的命令内容,明确具体要执行的操作指令。例如:cmd: "ls -l /home" 就是用于列出 /home 目录下文件的详细信息。
creates:可选参数,指定一个文件路径。若该文件已存在,则跳过此命令执行,可用于避免重复执行不必要的命令。比如 creates: /tmp/flag_file,若 /tmp/flag_file 存在,对应命令就不会执行。
removes:可选参数,指定一个文件路径。若该文件不存在,则跳过此命令执行,同样用于控制命令的执行条件。例如 removes: /tmp/delete_me,若 /tmp/delete_me 不存在,该命令就不执行。
示例及注释

# 任务名称,描述此任务的大致作用
- name: Execute a command if a file doesn't exist
  ansible.builtin.command:
    cmd: "echo 'Hello, World!' > /tmp/greeting.txt"  # 要执行的命令,向文件写入内容
    removes: /tmp/greeting.txt  # 若文件不存在才执行命令,避免重复写入

2. shell 模块
作用
在远程主机上执行 Shell 命令,支持各种 Shell 特性(如管道、重定向等),但安全性稍低,常用于需要复杂 Shell 功能的场景。
主要参数及说明
cmd:需执行的 Shell 命令,必选参数,定义具体的 Shell 操作内容。例如 cmd: "ps aux | grep httpd" 可查找包含 httpd 的进程信息,利用了管道符来组合命令。
executable:指定执行命令的 Shell 解释器,默认是 /bin/sh,若需要使用特定的 Shell(如 bash)可通过此参数设置,例如 executable: /bin/bash,确保命令按期望的 Shell 语法规则执行。
creates、removes:同 command 模块中的功能,依据文件存在与否决定是否执行命令,用于控制命令执行的前置条件。
示例及注释

# 使用bash解释器执行命令,查找并输出特定进程信息
- name: Use shell command with bash interpreter
  ansible.builtin.shell:
    cmd: "source /etc/profile && echo $PATH"  # 先加载环境变量再输出PATH内容,需要bash特性
    executable: /bin/bash  # 指定使用bash解释器


3. script 模块
作用
将本地脚本传输到远程主机并执行,方便在多台远程主机上统一部署和运行本地编写好的脚本。
主要参数及说明
local_path:本地脚本的完整路径,必填参数,明确要传输并执行的脚本在本地的具体位置。例如 local_path: /local/scripts/myscript.sh,指定了具体的脚本文件路径。
creates、removes:根据远程主机上文件情况决定脚本是否执行,与前两个模块类似,用于避免不必要的脚本重复执行。
示例及注释

# 如果远程主机上指定文件不存在,就执行本地脚本
- name: Run local script on remote host if flag file doesn't exist
  ansible.builtin.script:
    local_path: /local/scripts/setup.sh  # 本地脚本的路径
    removes: /remote/setup_done.txt  # 若此文件不存在则执行脚本


4. copy 模块
作用
将本地文件复制到远程主机指定位置,常用于部署配置文件、程序文件等各类文件到远程服务器。
主要参数及说明
src:本地源文件路径,必填,即要复制的文件在本地的具体位置,例如 src: /local/files/config.ini,指明了源文件所在的本地目录及文件名。
dest:远程主机目标文件或目录路径,必填,确定文件在远程主机上的存放位置,若目标是目录,会将文件复制进去;若目录不存在,会创建相应目录结构。比如 dest: /remote/config/config.ini。
owner:远程主机上复制后文件的所有者,可选参数,用于设置文件在远程主机上所属的用户,例如 owner: user1 可更改文件所有者为指定用户。
group:远程主机上复制后文件所属用户组,可选参数,指定文件在远程主机上所属的用户组,例如 group: group1,可用于权限管理等操作。
mode:远程主机上复制后文件的权限模式,可选参数,格式为 '0644' 等,设定文件的读写执行权限,像 mode: '0755' 赋予相应的权限组合。
backup:是否备份目标文件,可选参数,取值 yes 或 no(默认),若 yes,在覆盖目标文件前备份原文件,便于出现问题时恢复,例如 backup: yes。
示例及注释

# 将本地文件复制到远程主机,设置文件权限、所有者,并备份原文件
- name: Copy file with permission and backup settings
  ansible.builtin.copy:
    src: /local/files/data.txt  # 本地源文件路径
    dest: /remote/data/data.txt  # 远程目标文件路径
    owner: user2  # 设置远程文件所有者
    group: group2  # 设置远程文件所属用户组
    mode: '0600'  # 设置远程文件权限
    backup: yes  # 备份原文件

5. get_url 模块
作用
从指定 URL 下载文件到远程主机,便于获取远程资源并部署到远程服务器环境中。
主要参数及说明
url:要下载文件的 URL 地址,必填参数,明确文件的来源网址,例如 url: https://example.com/files/file.zip。
dest:文件下载到远程主机的目标路径,必填,确定文件在远程主机上的保存位置,如 dest: /remote/downloads/file.zip。
checksum:下载文件的校验和,用于验证文件完整性,可选参数,格式如 sha256:abcdef1234567890,通过比对校验和确保下载的文件没有损坏或被篡改,例如 checksum: sha256:1111111111111111。
timeout:下载超时时间(单位:秒),默认 10 秒,可选参数,用于设置下载操作的最长等待时间,避免长时间无响应的下载阻塞任务,像 timeout: 30 可延长超时时间。
force:是否强制重新下载,可选参数,取值 yes 或 no(默认),若 yes,即便文件已存在也重新下载,例如 force: yes 可用于确保获取最新版本的文件。
示例及注释

# 从指定URL下载文件到远程主机,验证文件校验和,并设置超时时间
- name: Download file with checksum verification
  ansible.builtin.get_url:
    url: https://example.com/files/important.txt  # 文件来源网址
    dest: /remote/important/important.txt  # 远程主机保存路径
    checksum: sha256:2222222222222222  # 文件校验和
    timeout: 30  # 下载超时时间延长到30秒

6. fetch 模块
作用
从远程主机获取文件到本地,按主机名和文件路径保存到本地对应目录结构下,常用于收集远程主机上的日志文件、配置文件等重要资料。
主要参数及说明
src:远程主机上要获取的文件路径,必填,明确要获取的远程文件的具体位置,例如 src: /var/log/messages。
dest:本地存放获取文件的目标目录,必填,确定在本地保存文件的目录位置,像 dest: /local/logs/。
flat:是否扁平化保存,可选参数,取值 yes 或 no(默认),若 yes,不按主机名等结构保存,直接将文件保存到 dest 指定的目录下,简化文件保存结构,例如 flat: yes。
示例及注释

# 从远程主机获取文件到本地,采用扁平化保存方式
- name: Fetch file from remote host in flat mode
  ansible.builtin.fetch:
    src: /var/log/messages  # 远程主机上的文件路径
    dest: /local/logs/  # 本地目标目录
    flat: yes  # 扁平化保存文件

7. file 模块
作用
管理远程主机上文件和目录的属性、创建、删除等操作,涵盖了对文件和目录的多种管理功能。
主要参数及说明
path:要操作的文件或目录在远程主机的路径,必填,指定具体的操作对象在远程主机上的位置,比如 path: /remote/dir1。
state:操作状态,必填,取值有:
directory:创建目录,用于在远程主机上创建新的目录,例如 state: directory 可创建指定目录。
file:创建空文件,可用于创建空的文件,例如 state: file 可创建空文件。
link:创建软链接,需配合 src 指定链接源,像 state: link,src: /original/file,dest: /link/file 这样的组合可创建软链接,将目标链接到源文件。
hard:创建硬链接,同理需 src 参数配合,例如 state: hard,src: /original/file,dest: /hard_link/file 用于创建硬链接。
absent:删除文件或目录,用于删除远程主机上指定的文件或目录,比如 state: absent 可删除对象。
mode:文件或目录权限模式,可选参数,格式 '0755' 等,用于设定文件或目录的读写执行权限,例如 mode: '0644' 设置常规的文件权限。
owner:所有者,可选参数,更改文件或目录在远程主机上的所属用户,如 owner: owner1 可调整所有者为指定用户。
group:所属用户组,可选参数,修改文件或目录在远程主机上所属的用户组,例如 group: group1 可将所属组更改为指定组。
recurse:是否递归操作,可选参数,取值 yes 或 no(默认),当 state 为 directory 且要递归设置属性时用,比如要对整个目录及其内部所有文件和子目录设置权限等属性时,使用 recurse: yes。
示例及注释

# 在远程主机上创建一个具有特定权限、所有者和用户组的目录
- name: Create a directory with specific permissions
  ansible.builtin.file:
    path: /remote/new_dir  # 要创建的目录在远程主机上的路径
    state: directory  # 创建目录操作
    mode: '0750'  # 目录权限设置
    owner: user3  # 目录所有者设置
    group: group3  # 目录所属用户组设置

8. stat 模块
作用
获取远程主机上文件或目录的状态信息(权限、大小、修改时间等),便于后续根据文件状态进行相应的处理决策。
主要参数及说明
path:要获取状态信息的文件或目录在远程主机的路径,必填,明确要查询状态的对象位置,例如 path: /remote/file.txt。
follow:是否跟踪符号链接获取目标文件状态,可选参数,取值 yes 或 no(默认),若 yes,获取链接目标状态,若 no 则获取符号链接本身的状态信息,例如 follow: yes 可获取链接指向文件的实际状态。
示例及注释

# 获取远程主机上文件状态信息,若文件是符号链接则获取链接目标状态
- name: Get file status and follow link if exists
  ansible.builtin.stat:
    path: /remote/linked_file.txt  # 要获取状态的文件路径
    follow: yes  # 跟踪符号链接获取目标状态
  register: file_status  # 将获取的状态信息注册到变量,方便后续使用

9. unarchive 模块
作用
解压归档文件(如 zip、tar 等格式)到远程主机指定位置,用于部署压缩包内的文件资源到远程服务器。
主要参数及说明
src:远程主机上要解压的归档文件路径,必填,明确要解压的文件在远程主机上的位置,例如 src: /remote/archives/file.zip。
dest:解压到远程主机的目标目录,必填,确定解压后的文件存放位置,像 dest: /remote/extracted/。
remote_src:文件是否已在远程主机,可选参数,取值 yes 或 no(默认),若 yes 表示文件已在远程主机上,适用于文件已提前传输到远程的情况,例如 remote_src: yes 用于已在远程的情况。
creates:若解压后指定文件已存在则跳过解压,可选参数,用于避免重复解压操作,如 creates: /remote/extracted/readme.txt,若该文件存在则不解压。
extract_dirs:指定解压特定目录内容(针对多目录的归档文件),可选参数,可精准控制解压的范围,例如 extract_dirs: my_folder 只解压归档文件里名为 my_folder 的目录内容。
示例及注释

# 如果解压目标目录中指定文件不存在,就解压远程主机上的归档文件
- name: Unarchive file if target readme doesn't exist
  ansible.builtin.unarchive:
    src: /remote/archives/file.zip  # 远程主机上要解压的文件路径
    dest: /remote/extracted/  # 解压目标目录
    remote_src: yes  # 文件已在远程主机
    creates: /remote/extracted/readme.txt  # 若此文件存在则不解压

10. archive 模块
作用
对远程主机上的文件或目录进行归档(压缩)处理,方便对文件进行打包备份或传输。
主要参数及说明
path:要归档的文件或目录在远程主机的路径,必填,指定要压缩的对象位置,例如 path: /remote/folder_to_archive。
dest:生成的归档文件在远程主机上的保存路径及文件名,必填,确定压缩后文件的保存位置和名称,像 dest: /remote/archives/archive.tar.gz。
format:归档格式,可选参数,如 gz(gzip 压缩的 tar 包)、zip 等,用于指定生成的归档文件格式,例如 format: gz 生成对应格式的压缩文件。
owner:归档后文件的所有者,可选参数,设置压缩后文件在远程主机上的所有者,比如 owner: owner4 设定所有者信息。
group:归档后文件所属用户组,可选参数,指定压缩后文件在远程主机上所属的用户组,例如 group: group4 设定所属组信息。
exclude:要排除在归档之外的文件或目录,可选参数,可以是单个或列表形式,用于排除不需要打包的内容,像 exclude: [".git", "logs"] 可排除 .git 目录和 logs 目录不进行归档。
示例及注释

# 对远程主机上的目录进行归档,排除特定子目录,并设置归档文件的所有者和用户组
- name: Archive a directory excluding specific items
  ansible.builtin.archive:
    path: /remote/project_folder  # 要归档的目录路径
    dest: /remote/archives/project.tar.gz  # 归档文件保存路径及名称
    format: gz  # 归档格式为gzip压缩的tar包
    exclude: [".git", "logs"]  # 排除的目录列表
    owner: owner4  # 归档文件所有者
    group: group4  # 归档文件所属用户组

11. hostname 模块
作用
管理远程主机的主机名,方便统一配置和修改主机的标识名称。
主要参数及说明
name:要设置的主机名,必填,明确要更改成的主机名内容,例如 name: new_hostname。
示例及注释

# 设置远程主机的新主机名
- name: Set a new hostname for the remote host
  ansible.builtin.hostname:
    name: my_new_hostname  # 要设置的新主机名

12. cron 模块
作用
用于管理远程主机上的 cron 定时任务,可方便地添加、删除、修改定时任务以及控制任务的执行时间、状态等。
主要参数及说明
name:必选参数,定时任务的名称,用于唯一标识该任务,便于后续管理(如更新、删除任务等)。例如 name: "Daily_Backup" 就是给定时任务起的一个便于识别的名字。
minute:可选参数,任务执行的分钟数,取值范围是 0 - 59,可以是具体数字、通配符(如 * 表示每分钟)或者时间间隔表达式(如 */5 表示每 5 分钟)等。例如 minute: "0" 表示任务在 0 分钟时执行, minute: "*/10" 意味着每 10 分钟执行一次任务。
hour:可选参数,任务执行的小时数,范围是 0 - 23,同样支持具体数字、通配符及时间间隔表达式等设置方式。像 hour: "2" 表示任务在凌晨 2 点执行,hour: "*/3" 则是每 3 小时执行一次任务。
day:可选参数,任务执行的日期,取值为 1 - 31,用于指定每个月的具体哪一天执行任务,设置规则和前面参数类似。例如 day: "1" 表示每月 1 号执行任务,day: "*" 代表每天都执行。
month:可选参数,任务执行的月份,范围是 1 - 12,用于确定任务在一年中的哪些月份执行,可按照常规方式设置具体月份数字或者使用通配符等。比如 month: "1" 表示任务在 1 月执行,month: "*/2" 即每两个月执行一次任务。
weekday:可选参数,任务执行的星期,取值 0 - 6(0 表示星期日),用于指定任务在每周的哪一天执行,设置方法同其他时间参数。例如 weekday: "1" 表示任务在星期一执行,weekday: "*" 代表每周的每天都执行。
job:必选参数,要执行的命令内容,即定时任务具体执行的脚本或命令,明确了定时任务实际要做的操作。例如 job: "/usr/bin/backup_script.sh" 表示执行该备份脚本。
disabled:可选参数,取值为 yes 或 no(默认值),若设为 yes,则禁用该定时任务,使其暂时不执行,但配置信息保留,方便后续重新启用;若为 no,任务处于启用状态,可正常按照设定时间执行。例如 disabled: yes 可暂停某个定时任务,不使其执行。
示例及注释

# 任务名称,描述此任务是添加一个每天凌晨3点执行的备份定时任务
- name: Add a daily backup cron job
  ansible.builtin.cron:
    name: "Daily_Backup"  # 定时任务的名称,便于识别和管理
    minute: "0"  # 在0分钟时执行
    hour: "3"  # 凌晨3点执行
    job: "/usr/bin/backup_script.sh"  # 执行的备份脚本命令

13. yum 模块
作用
用于在基于 Red Hat 系的系统(如 CentOS、RHEL 等)上安装、更新、卸载软件包,是管理这类系统软件包的重要工具。
主要参数及说明
name:必选参数,软件包名称,可以是单个包名,也可以是列表形式的多个包名,指定要操作的具体软件包。例如 name: ["httpd", "php"] 表示同时对 httpd 和 php 这两个软件包进行操作,如安装、更新或卸载等。
state:必选参数,取值可以是 present(安装软件包,如果已安装则不做处理)、latest(安装最新版本,如有更新则更新到最新版)、absent(卸载软件包),用于定义对软件包的具体操作行为。比如 state: present 用于安装指定的软件包,state: latest 常用于确保软件包是最新版本,state: absent 则是将软件包从系统中移除。
update_cache:可选参数,取值为 yes 或 no(默认值),若设为 yes,在执行安装等操作前会先更新 yum 缓存,确保获取的软件包信息是最新的,常用于安装新软件包前获取最新的软件源数据,避免因缓存过期导致安装的不是最新版本。例如 update_cache: yes 可在安装软件包之前先更新 yum 缓存。
disable_gpg_check:可选参数,取值为 yes 或 no(默认值),若设为 yes,会禁用 GPG 校验,在某些情况下(如使用非官方但信任的软件源时)可能需要关闭校验来顺利安装软件包,但这样会降低一定的安全性,因为 GPG 校验是为了验证软件包来源的合法性和完整性。例如 disable_gpg_check: yes 可禁用 GPG 校验来安装软件包。
示例及注释

# 任务名称,描述此任务是使用yum安装httpd软件包,并先更新yum缓存
- name: Install httpd package using yum
  ansible.builtin.yum:
    name: httpd  # 要安装的软件包名称
    state: present  # 执行安装操作,若已安装则不处理
    update_cache: yes  # 先更新yum缓存再安装

14. apt 模块
作用
用于在基于 Debian 系的系统(如 Ubuntu 等)上安装、更新、卸载软件包,与 yum 模块类似,是 Debian 系系统软件管理的核心模块。
主要参数及说明
name:必选参数,软件包名称,和 yum 模块中的 name 参数功能一样,可单个或多个软件包名组成列表形式,例如 name: ["apache2", "python3"] 表示要对 apache2 和 python3 这两个软件包进行操作。
state:必选参数,取值 present(安装)、latest(更新到最新)、absent(卸载),用于确定对软件包的操作类型,功能等同于 yum 模块中的 state 参数在 Debian 系系统中的应用。比如安装软件包时使用 state: present,更新软件包到最新版本用 state: latest,卸载软件包则设为 state: absent。
update_cache:可选参数,取值为 yes 或 no(默认值),若 yes,先更新软件源缓存,再执行后续的软件包操作,确保获取到最新的软件包列表信息,作用与 yum 模块中的该参数类似,常用于安装新软件前保证数据是最新的。例如 update_cache: yes 会在操作软件包之前先更新 apt 软件源缓存。
force_apt_get:可选参数,取值为 yes 或 no(默认值),在一些特殊情况下,若需要强制使用 apt-get 命令来执行操作(而不是 Ansible 默认选择的更智能的命令方式),可将此参数设为 yes。例如 force_apt_get: yes 可强制使用 apt-get 进行软件包的相关操作。
示例及注释

# 任务名称,描述此任务是使用apt安装apache2软件包,并先更新软件源缓存
- name: Install apache2 package using apt
  ansible.builtin.apt:
    name: apache2  # 要安装的软件包名称
    state: present  # 执行安装操作
    update_cache: yes  # 先更新软件源缓存

15. yum_repository 模块
作用
配置基于 Red Hat 系系统的 yum 软件源仓库,方便添加、修改或删除自定义的软件源,以获取更多软件包或特定版本的软件包。
主要参数及说明
name:必选参数,仓库的名称,用于唯一标识该仓库,方便后续管理以及在 yum 配置中进行区分,例如 name: "My_Custom_Repo" 就是给新建的 yum 仓库起的一个特定名称。
description:可选参数,对仓库的描述信息,通常用于简单说明仓库的用途、来源等,便于使用者了解该仓库情况,例如 description: "My custom Yum repository for additional packages" 可清晰表明仓库是用于存放额外软件包的自定义仓库。
baseurl:必选参数,仓库的基础 URL 地址,指向软件包所在的实际位置,是 yum 从哪里获取软件包的关键信息,必须是完整有效的网址形式,像 baseurl: http://example.com/yum/repo 就是指定了软件包的网络来源地址。
gpgcheck:可选参数,是否进行 GPG 校验,取值为 yes(校验)或 no(不校验),用于确定 yum 在使用该仓库下载软件包时是否验证软件包的签名,以确保软件包来源合法且未被篡改,例如 gpgcheck: no 表示不进行 GPG 校验,可能在使用自己信任但未签名的仓库时这样设置。
enabled:可选参数,取值为 yes 或 no(默认值),若 yes,启用该仓库,使其在 yum 操作中可以被使用来查找和下载软件包;若为 no,则禁用该仓库,即使配置了也不会被 yum 考虑,例如 enabled: yes 可启用新建的 yum 仓库。
示例及注释

# 任务名称,描述此任务是添加一个新的yum软件源仓库
- name: Add a new yum repository
  ansible.builtin.yum_repository:
    name: "My_Custom_Repo"  # 仓库的名称,用于标识
    description: "My custom Yum repository for additional packages"  # 仓库描述
    baseurl: http://example.com/yum/repo  # 仓库软件包的基础URL地址
    gpgcheck: no  # 不进行GPG校验
    enabled: yes  # 启用该仓库

16. service 模块
作用
管理远程主机上的服务(启动、停止、重启、查看状态等),方便对各种系统服务进行统一的运维操作。
主要参数及说明
name:必选参数,服务的名称,明确要操作的是哪个具体服务,不同系统下服务名称可能不同,例如 name: httpd 表示针对 httpd 服务进行相关操作,像启动、停止等。
state:必选参数,用于定义服务的期望状态,可取值为 started(启动服务)、stopped(停止服务)、restarted(重启服务,常用于服务配置更改后使其生效)、reloaded(重新加载服务配置,通常在配置文件修改后使用,能在不中断服务的情况下让新配置生效),根据实际需求来设置服务要达到的状态,例如 state: started 用于启动指定服务。
enabled:可选参数,取值为 yes 或 no,用于设置服务是否开机自启,默认值为 no,当设置为 yes 时,系统下次开机时该服务会自动启动,便于确保重要服务在系统重启后能自动运行,例如 enabled: yes 可让服务在系统开机时自动启动。
示例及注释

# 任务名称,描述此任务是启动httpd服务,并设置为开机自启
- name: Start the httpd service and enable it to start on boot
  ansible.builtin.service:
    name: httpd  # 要操作的服务名称
    state: started  # 启动服务
    enabled: yes  # 设置服务开机自启

17. user 模块
作用
管理远程主机上的用户账户(创建、删除、修改属性等),全面负责用户相关信息的配置和维护。
主要参数及说明
name:必选参数,用户名,是识别要操作的用户对象的关键标识,例如 name: "new_user" 就是要创建、修改或删除的用户名。
password:可选参数,设置用户密码,需要使用密码哈希值传递,可通过 password_hash 过滤器进行加密,这样能保证密码在配置文件等地方不以明文形式出现,保障安全性,例如 password: "{{ 'mypassword' | password_hash('sha512') }}" 就是对 mypassword 进行 sha512 加密后设置为用户密码,用于创建用户时设置密码。
groups:可选参数,指定用户所属的用户组,可以是单个组名或组名列表,通过此参数可以将用户添加到多个组中,从而赋予用户相应组的权限,例如 groups: ["wheel", "users"] 表示将用户添加到 wheel 和 users 这两个用户组中。
state:可选参数,取值为 present(创建或更新用户,如果用户已存在则修改相应属性)、absent(删除用户),根据具体需求来决定是创建、修改还是删除用户,例如 state: present 用于创建或修改指定用户信息,state: absent 则是删除对应的用户账户。
create_home:可选参数,取值为 yes 或 no,默认值为 yes,用于决定是否创建用户的家目录,若设置为 no,在创建用户时不会创建家目录,根据实际使用场景来确定是否需要为用户提供独立的家目录空间,例如 create_home: no 在创建用户时不会创建家目录。
示例及注释

# 任务名称,描述此任务是创建一个新用户,设置密码、添加到指定用户组并创建家目录
- name: Create a new user with password and specific groups
  ansible.builtin.user:
    name: "new_user"  # 要创建的用户名
    password: "{{ 'mypassword' | password_hash('sha512') }}"  # 加密后的用户密码
    groups: ["wheel", "users"]  # 用户所属的用户组列表
    create_home: yes  # 创建用户家目录
    state: present  # 创建或更新用户的操作

18. group 模块
作用
管理远程主机上的用户组(创建、删除、修改属性等),用于对用户进行组织管理以及权限分配等操作。
主要参数及说明
name:必选参数,用户组名,是操作对应用户组的核心依据,例如 name: "new_group" 表示要创建、修改或删除的用户组名称。
state:可选参数,取值为 present(创建或更新组,如果组已存在则修改相应属性)、absent(删除组),根据实际需求决定是创建、修改还是删除用户组,例如 state: present 用于创建或修改指定用户组,state: absent 则是删除对应的用户组。
gid:可选参数,用于指定用户组的组 ID,在某些特定场景下(如需与其他系统的用户组 ID 保持一致等),可能需要为用户组设置特定的数字标识,例如 gid: 1001 可给新建的用户组设置特定的组 ID。
示例及注释

# 任务名称,描述此任务是创建一个新的用户组,并指定其组 ID
- name: Create a new user group with a specific GID
  ansible.builtin.group:
    name: "new_group"  # 要创建的用户组名称
    gid: 1001  # 为该用户组设置的组 ID
    state: present  # 创建或更新用户组的操作

19. lineinfile 模块
作用
用于确保特定文本行在指定文件中存在(若不存在则添加),或者替换文件中已有的特定文本行,在配置文件管理、修改方面应用广泛。
主要参数及说明
path:必选参数,指定要操作的文件在远程主机上的路径,它明确了模块具体作用的目标文件位置。例如:path: /etc/nginx/nginx.conf 表明要对 nginx 配置文件进行文本行相关的操作。
line:必选参数,定义了要添加到文件中或者用于替换已有行的文本内容。比如:line: "server_name example.com;" 就是要确保配置文件中有这样一行文本,或者用它替换匹配的旧行。
backup:可选参数,取值为 yes 或 no(默认值为 no)。若设置为 yes,在对文件进行修改前,会先备份原文件,备份文件的文件名会带有时间戳后缀,方便出现问题时回滚到原始状态。例如:backup: yes 开启备份功能,增强操作的安全性。
state:可选参数,取值有 present(默认)和 absent。present 表示确保指定的文本行存在于文件中(不存在则添加);absent 则是确保指定的文本行在文件中不存在(存在则删除)。例如:state: absent 可用于删除文件中特定的某行配置内容。
insertafter:可选参数,指定插入文本行的位置,可取值为特定的文本行(新行将插入到匹配行之后)、EOF(文件末尾)等。例如:insertafter: "http {" 会把 line 参数定义的行插入到文件中 http { 这行之后。
insertbefore:可选参数,与 insertafter 类似,但表示将新行插入到指定行之前,比如:insertafter: "server {" 可将目标行插入在 server { 这行之前。
示例及注释

# 任务名称,描述此任务要在 /etc/hosts 文件中添加一行内容,如果文件不存在此行则添加,且修改前备份原文件
- name: Add a line to the /etc/hosts file if needed and backup
  ansible.builtin.lineinfile:
    path: /etc/hosts  # 目标文件路径,即 /etc/hosts 文件
    line: "192.168.1.100 myserver"  # 要添加到文件中的文本行内容
    backup: yes  # 开启备份功能
    state: present  # 确保此行存在,不存在则添加

# 任务名称,此任务要删除 /etc/nginx/nginx.conf 文件中特定的一行配置,若存在的话
- name: Remove a specific line from nginx.conf
  ansible.builtin.lineinfile:
    path: /etc/nginx/nginx.conf  # 目标配置文件路径
    line: "server_name old.example.com;"  # 要删除的文本行内容
    state: absent  # 确保此行不存在,存在则删除


20. replace 模块
作用
基于正则表达式在文件中查找并替换相应的文本内容,适用于需要灵活、精准匹配文本进行替换的场景,常用于修改配置文件等操作。
主要参数及说明
path:必选参数,指定待操作的文件在远程主机上的路径,明确具体要处理的文件所在位置。例如:path: /etc/httpd/conf/httpd.conf 意味着要对 httpd 的配置文件进行文本替换操作。
regexp:必选参数,定义用于匹配要替换内容的正则表达式,通过正则表达式的强大匹配能力,精准定位文件中需要替换的部分。例如:regexp: 'Listen 80' 可以匹配配置文件中出现的 Listen 80 字样,准备进行替换。
replace:必选参数,指定替换后的文本内容,明确了把匹配到的内容替换成什么文本。例如:replace: 'Listen 8080' 就是会将前面 regexp 匹配到的内容替换为 Listen 8080。
backup:可选参数,取值为 yes 或 no(默认值为 no),若 yes,在替换操作前备份原文件,方便后续出现问题时能恢复原始文件内容,例如:backup: yes 开启备份功能,保障操作的可恢复性。
after:可选参数,可指定一个文本内容,替换操作会在匹配到此文本之后的部分进行,用于更精准地限定替换范围,例如:after: '<VirtualHost>' 表示只在匹配到 <VirtualHost> 这个标签后的文本里进行替换操作。
before:可选参数,与 after 类似,但替换操作限定在匹配到此文本之前的部分,例如:before: '</VirtualHost>' 可将替换范围限定在匹配到 </VirtualHost> 标签之前的文本中。
示例及注释

# 任务名称,描述此任务使用正则表达式替换 httpd.conf 文件中的文本内容,并备份原文件
- name: Replace text in the httpd.conf file using regex and backup
  ansible.builtin.replace:
    path: /etc/httpd/conf/httpd.conf  # 要操作的配置文件路径
    regexp: 'Listen 80'  # 用于匹配要替换内容的正则表达式
    replace: 'Listen 8080'  # 替换后的文本内容
    backup: yes  # 开启备份功能

# 任务名称,此任务在指定文件特定区域内(在某文本之后)进行文本替换
- name: Replace text after a specific line in a file
  ansible.builtin.replace:
    path: /etc/nginx/sites-enabled/default  # 目标文件路径
    regexp: 'root /var/www/html;'  # 要匹配替换的正则表达式
    replace: 'root /var/www/new_site;'  # 替换后的文本
    after: 'server {'  # 只在匹配到 'server {' 之后的文本里进行替换

21. selinux 模块
作用
用于管理远程主机上的 SELinux(Security-Enhanced Linux)配置,可设置 SELinux 的运行模式(如强制、宽容等)以及整体状态(启用、禁用等),对系统安全策略进行调控。
主要参数及说明
state:必选参数,取值为 enforcing(强制模式,严格执行 SELinux 规则,对不符合规则的操作进行阻止)、permissive(宽容模式,仅记录违反规则的操作但不阻止,常用于调试或过渡阶段)、disabled(禁用 SELinux),用于确定 SELinux 的整体运行状态,例如:state: permissive 可将 SELinux 设置为宽容模式,方便排查可能因 SELinux 规则引发的问题。
policy:可选参数,指定 SELinux 策略类型,常见的如 targeted(针对特定类型的进程和文件进行 SELinux 管控)等,不同策略有不同的规则和应用范围,例如:policy: targeted 明确采用的是 targeted 策略来实施 SELinux 安全管控。
示例及注释

# 任务名称,描述此任务将 SELinux 设置为宽容模式,并采用 targeted 策略
- name: Set SELinux to permissive mode with targeted policy
  ansible.builtin.selinux:
    state: permissive  # 设置 SELinux 为宽容模式
    policy: targeted  # 采用的 SELinux 策略类型


22. reboot 模块
作用
用于重启远程主机,通常在进行一些系统级的配置更改后,需要重启系统使配置生效时使用,保障系统配置的变更能正常发挥作用。
主要参数及说明
test_command:可选参数,指定一个命令用于在重启前测试系统状态,通过执行该命令来判断系统当前是否满足重启条件或者验证某些关键服务是否正常运行等。例如:test_command: "ps aux | grep httpd" 可以先查看 httpd 进程是否正常运行,若不符合预期再执行重启操作,避免不必要的重启造成系统故障。
pre_reboot_delay:可选参数,设置重启前的延迟时间(单位:秒),默认值为 0 秒,在一些复杂环境或者需要等待某些后台操作完成后再重启的场景下很有用,例如:pre_reboot_delay: 5 表示在执行重启操作前等待 5 秒,确保系统处于合适的重启状态。
post_reboot_delay:可选参数,设置重启后的延迟时间(单位:秒),默认值为 0 秒,有时候需要等待主机重启后系统完全稳定或者某些服务启动完成后再继续后续操作,例如:post_reboot_delay: 10 表示在主机重启后等待 10 秒再继续后续操作,保证后续任务能正常执行。
示例及注释
 

# 任务名称,描述此任务重启远程主机,设置重启前等待5秒,重启后等待10秒,并在重启前检查 httpd 进程
- name: Reboot the remote host with delays and check httpd process
  ansible.builtin.reboot:
    pre_reboot_delay: 5  # 重启前延迟5秒
    post_reboot_delay: 10  # 重启后延迟10秒
    test_command: "ps aux | grep httpd"  # 重启前检查 httpd 进程


23. mount 模块
作用
管理远程主机上的文件系统挂载点,包括挂载、卸载以及配置挂载相关属性等操作,便于对存储设备、网络共享等文件系统资源进行有效利用和管理。
主要参数及说明
path:必选参数,指定挂载点在远程主机上的路径,即要将文件系统挂载到哪个目录下,例如:path: /data 表示要将文件系统挂载到 /data 目录下,后续对该挂载点目录的访问就相当于访问对应的文件系统内容。
src:必选参数,指明要挂载的设备或文件系统源,比如磁盘分区(如 /dev/sdb1)、网络共享路径等,例如:src: /dev/sdb1 表示挂载 /dev/sdb1 这个磁盘分区,确定了文件系统的来源。
fstype:必选参数,定义文件系统类型,如 ext4、xfs、nfs 等,不同的文件系统有不同的特性和兼容性,需要根据实际挂载的源文件系统来指定,例如:fstype: ext4 说明挂载的是 ext4 类型的文件系统。
state:必选参数,取值为 mounted(挂载文件系统)、unmounted(卸载文件系统)、absent(删除挂载配置,包括卸载和清理 /etc/fstab 中的相关记录),用于确定对挂载点的操作类型,例如:state: mounted 用于挂载指定的文件系统,使它可被访问使用。
opts:可选参数,设置挂载选项,以逗号分隔的字符串形式给出,用于定制文件系统的挂载特性,常见的选项有 rw(可读写)、ro(只读)、defaults(采用默认挂载选项)等,例如:opts: "defaults,rw" 表示采用默认挂载选项并设置为可读写模式,满足不同的使用需求。
示例及注释

# 任务名称,描述此任务挂载一个磁盘分区到指定目录,设置为可读写模式,并采用默认挂载选项
- name: Mount a partition with specific options
  ansible.builtin.mount:
    path: /data  # 挂载点路径
    src: /dev/sdb1  # 要挂载的磁盘分区
    fstype: ext4  # 文件系统类型
    state: mounted  # 执行挂载操作
    opts: "defaults,rw"  # 挂载选项


24. setup 模块
作用
收集远程主机的系统信息,例如硬件信息、网络信息、操作系统版本等各类详细情况,收集到的信息可在后续任务中作为变量使用,便于根据不同主机的实际情况进行针对性配置,增强 Ansible 配置的灵活性。
主要参数及说明
通常无额外必填参数,直接使用即可收集远程主机的完整系统信息,不过可以通过 filter 参数来指定收集特定类型的信息,这样可以避免收集过多不必要的数据,提高效率并且精准获取所需内容,例如:filter: "ansible_distribution" 只收集远程主机的操作系统发行版相关信息,方便后续仅针对操作系统类型做相应配置。
示例及注释

# 任务名称,收集远程主机的所有系统信息,并将结果注册到变量 all_facts 中
- name: Gather all facts about the remote host
  ansible.builtin.setup:
  register: all_facts

# 任务名称,只收集远程主机的操作系统发行版相关信息,并注册到变量 dist_facts 中
- name: Gather only distribution facts
  ansible.builtin.setup:
    filter: "ansible_distribution"
  register: dist_facts


25. debug 模块
作用
主要用于调试 Ansible 任务,可输出指定的变量、消息等内容,帮助排查任务执行过程中的问题,是定位和解决任务执行异常情况的重要辅助工具。
主要参数及说明
var:可选参数,用于输出指定的变量值,通过查看变量的值可以了解任务执行过程中的实际情况,例如:var: ansible_facts['ansible_hostname'] 可输出远程主机的主机名变量值,方便确认主机相关信息是否正确获取。
msg:可选参数,输出自定义的消息内容,可用于在任务执行的关键节点输出提示信息,便于追踪任务流程,例如:msg: "This is a debug message" 可在任务执行过程中输出相应提示消息,告知当前任务的执行状态等情况。
示例及注释
 

# 任务名称,输出远程主机的主机名变量值,用于调试查看主机名是否正确获取
- name: Debug and print the hostname variable
  ansible.builtin.debug:
    var: ansible_facts['ansible_hostname']

# 任务名称,输出一个自定义的调试消息,提示任务即将开始
- name: Print a custom debug message
  ansible.builtin.debug:
    msg: "The task is about to start."


26. sysctl 模块
作用
用于配置和管理远程主机的内核参数,例如设置网络相关参数、内存参数等,可实现系统性能调优和功能定制,提升系统整体性能和安全性,满足不同应用场景下对系统的特定要求。
主要参数及说明
name:必选参数,指定要设置的内核参数名称,明确具体要操作的内核参数对象,例如:name: net.ipv4.ip_forward 表示设置网络转发相关的内核参数,不同的内核参数影响系统不同方面的功能和性能。
value:必选参数,定义对应内核参数要设置的值,确定了参数最终要设定的具体数值,例如:value: 1 用于将 net.ipv4.ip_forward 参数的值设为 1,表示开启网络转发功能,实现相应的网络配置调整。
state:可选参数,取值为 present(确保参数设置为指定值,如果已设置且值相同则不做更改)、absent(删除该内核参数的设置,恢复默认值),用于确定对内核参数的操作方式,例如:state: present 保证参数按期望设置,维持系统配置的准确性。
reload:可选参数,取值为 yes 或 no,默认值为 no,若设置为 yes,在修改内核参数后会自动重新加载内核配置使其生效,确保参数修改能及时在系统中发挥作用,例如:reload: yes 确保参数修改后立即生效,避免因配置未生效导致的系统功能异常。
示例及注释

# 任务名称,设置网络转发内核参数为 1,并确保修改后立即生效
- name: Set the network forwarding kernel parameter
  ansible.builtin.sysctl:
    name: net.ipv4.ip_forward  # 要设置的内核参数名称
    value: 1  # 参数要设置的值
    state: present  # 确保参数设置为指定值
    reload: yes  # 修改后立即生效

27. pam_limits 模块
作用
用于配置远程主机上的 PAM(Pluggable Authentication Modules)资源限制,可针对不同用户或用户组对诸如进程数、文件打开数等系统资源进行限制,以此保障系统资源能合理分配并安全稳定运行。
主要参数及说明
domain:必选参数,指定要应用限制的对象,其取值可以是用户名、用户组名或者 *(代表所有用户)。比如 domain: "user1" 表示仅针对名为 user1 的用户设置资源限制;若写为 domain: "*" 则意味着对系统内所有用户都应用相应的资源限制规则,便于按需求精准控制资源分配范围。
limit_type:必选参数,取值为 -(软限制,当用户超过该限制时会发出警告,但操作仍可继续执行)、=(硬限制,严格限制用户不能超过此设定值,一旦超过会被强制阻止操作)。例如,设置 limit_type: "-" 用于对用户进程数设置软限制,给用户一定的弹性空间同时又能起到提醒作用;而 limit_type: "=" 则常用于对关键资源做严格把控,防止用户过度消耗资源。
item:必选参数,定义要限制的资源类型,常见的有 nofile(文件打开数)、nproc(进程数)、memlock(内存锁定大小)等。像 item: "nofile" 就是针对用户可打开的文件数量进行限制,不同的资源类型对应系统不同方面的资源管控需求。
value:必选参数,指定对应资源限制的具体数值,明确了允许用户使用该资源的上限数量。例如 value: 1024 结合前面参数,可表示将用户的文件打开数限制为 1024 个,确保资源使用量在合理可控范围之内。
示例及注释

# 任务名称,描述此任务是针对特定用户user1设置文件打开数的软限制为1024个
- name: Set file open limit for a user as soft limit
  ansible.builtin.pam_limits:
    domain: "user1"  # 应用限制的对象为user1用户
    limit_type: "-"  # 设置软限制,超过会警告但可继续操作
    item: "nofile"  # 限制的资源类型为文件打开数
    value: 1024  # 文件打开数限制为1024个

# 任务名称,此任务是对所有用户设置进程数的硬限制为200个
- name: Set process limit for all users as hard limit
  ansible.builtin.pam_limits:
    domain: "*"  # 应用限制的对象为所有用户
    limit_type: "="  # 设置硬限制,严格不能超过
    item: "nproc"  # 限制的资源类型为进程数
    value: 200  # 进程数限制为200个


28. apt_repository 模块
作用
主要用于配置基于 Debian 系系统(如 Ubuntu 等)的 apt 软件源仓库,方便添加、更新或删除自定义的软件源,从而能够获取更多软件包或者特定版本的软件包,满足不同的软件安装和管理需求。
主要参数及说明
repo:必选参数,指定仓库的完整配置信息,以字符串形式给出,格式通常为 deb [arch=架构] url 发行版名称 组件(其中 deb 表示仓库类型,arch 部分可指定适用于的架构,若不写则默认适用于所有架构)。例如 repo: "deb http://example.com/apt/repo bionic main" 表示添加一个基于 Ubuntu 18.04(bionic)发行版,对应 main 组件,软件包来源网址为 http://example.com/apt/repo 的 apt 仓库,通过这样的配置明确了软件源的各项关键信息。
state:可选参数,取值为 present(添加或更新仓库配置,如果已存在则确保配置一致,比如检查仓库的 URL、组件等信息是否正确并进行修正)、absent(删除仓库配置,将对应的软件源仓库相关配置从系统中移除),用于确定对该 apt 仓库的操作是添加 / 更新还是删除,方便软件源仓库的管理维护。例如 state: present 用于添加新仓库或者保证已有仓库配置正确无误; state: absent 则用于清理不再需要的仓库配置。
filename:可选参数,指定仓库配置文件的文件名(默认情况下 Ansible 会根据仓库信息自动生成合适的文件名),在一些特定场景下,若希望手动指定文件名来便于识别或者遵循特定的管理规范时可使用该参数。例如 filename: "my_custom_repo.list" 可将仓库配置保存到名为 my_custom_repo.list 的文件中,而不是使用自动生成的文件名。
示例及注释

# 任务名称,描述此任务是添加一个新的apt软件源仓库,并指定文件名
- name: Add a new apt repository with custom filename
  ansible.builtin.apt_repository:
    repo: "deb http://newrepo.com/apt ubuntu focal main"  # 仓库完整配置信息,适用于Ubuntu 20.04(focal)的main组件
    state: present  # 添加或更新仓库配置
    filename: "myrepo.list"  # 指定仓库配置文件的文件名

# 任务名称,此任务是删除一个已有的apt软件源仓库
- name: Remove an existing apt repository
  ansible.builtin.apt_repository:
    repo: "deb http://oldrepo.com/apt debian stretch main"  # 要删除的仓库配置信息
    state: absent  # 执行删除仓库配置的操作

29. apt_key 模块
作用
用于管理基于 Debian 系系统(如 Ubuntu 等)的 apt 软件源仓库的密钥,通过添加、删除密钥等操作来验证软件源的合法性和完整性,确保从软件源下载的软件包来源可靠,防止因使用不安全的软件源而导致系统安全问题。
主要参数及说明
url:可选参数,指定获取密钥的 URL 地址,当需要从某个特定网址下载密钥文件时使用该参数,例如 url: "https://example.com/key.asc" 表示从该网址下载对应的密钥文件,常用于添加外部软件源的密钥,以信任其软件包来源。
id:可选参数,指定密钥的 ID(用于识别特定密钥,在一些密钥管理场景中使用,比如当系统中有多个相似用途但不同标识的密钥时,通过该 ID 精准定位操作某一密钥),例如 id: "1234567890ABCDEF" ,不过并非所有添加密钥的操作都需要指定该参数,只有在特定的密钥管理需求下才会用到。
state:可选参数,取值为 present(添加或确保密钥存在,若密钥不存在则从指定位置获取并添加到系统中,若已存在则不做额外操作)、absent(删除密钥,将指定的密钥从系统中移除),用于确定对密钥的操作行为,例如 state: present 用于添加新的软件源仓库所需的密钥或者确认已有密钥是否正常存在; state: absent 则用于清理不再需要或者过期的密钥。
keyserver:可选参数,指定密钥服务器的地址,用于从服务器获取密钥,例如 keyserver: "hkp://keyserver.ubuntu.com:80" 表示从 Ubuntu 的密钥服务器获取密钥,这是一种常见的获取密钥的方式,尤其适用于获取官方或常用软件源仓库对应的密钥。
示例及注释

# 任务名称,描述此任务是从指定URL添加一个apt密钥到系统中
- name: Add an apt key from a URL
  ansible.builtin.apt_key:
    url: "https://example.com/key.asc"  # 获取密钥的URL地址
    state: present  # 添加或确保密钥存在

# 任务名称,此任务是从Ubuntu的密钥服务器添加一个指定ID的密钥到系统中
- name: Add an apt key from Ubuntu keyserver with specific ID
  ansible.builtin.apt_key:
    keyserver: "hkp://keyserver.ubuntu.com:80"  # 密钥服务器地址
    id: "1234567890ABCDEF"  # 密钥的ID
    state: present  # 添加或确保密钥存在

# 任务名称,此任务是删除系统中某个特定的apt密钥
- name: Remove an apt key
  ansible.builtin.apt_key:
    id: "0987654321FEDCBA"  # 要删除的密钥的ID
    state: absent  # 执行删除密钥的操作

2.编写一个playbook实现Nginx的两种安装过程,安装方式可通过变量传入控制,编译安装和yum安装

 编写编译安装和yum安装的主程序:

# 这是一个Ansible playbook文件,用于在不同的条件下安装nginx。
# 它定义了一个play,该play针对名为'node'的主机组执行一系列任务。
 
- hosts: node  # 指定play的目标主机组为'node'
  tasks:  # 定义要在目标主机上执行的任务列表
    # 第一个任务:使用yum包管理器安装nginx
    - name: nginx_install_package  # 任务名称,描述为'nginx_install_package'
      yum: name=nginx state=present  # 使用yum模块安装nginx包,确保nginx处于安装状态
      when: nginx_var == "pkg"  # 当变量nginx_var的值等于"pkg"时,执行此任务
 
    # 第二个任务:包含另一个playbook文件来安装nginx的二进制版本
    - name: nginx_install_bin  # 任务名称,描述为'nginx_install_bin'
      include_tasks: nginx_bin.yaml  # 包含名为'nginx_bin.yaml'的外部任务文件
      when: nginx_var == "bin"  # 当变量nginx_var的值等于"bin"时,执行此任务

编写编译安装子程序和nginx的service文件:

# 任务名称:step1
# 使用 command 模块在远程主机上执行切换目录到 /usr/local/src/ 的命令,此操作可能是为后续在该目录下进行相关操作做准备
- name: step1
  command: cd /usr/local/src/

# 任务名称:step2
# 使用 yum 模块安装一系列开发工具和依赖库,通过循环逐个安装列表中的软件包,这些软件包通常是构建和运行 nginx 所需要的基础环境组件
- name: step2
  yum:
    name: "{{ item }}"
    state: present
  loop:
    - gcc
    - make
    - gcc-c++
    - libtool
    - pcre
    - pcre-devel
    - zlib
    - zlib-devel
    - openssl
    - openssl-devel
    - perl-ExtUtils-Embed

# 任务名称:step3
# 使用 get_url 模块从指定的 URL 下载 nginx 的源代码压缩包到 /usr/local/src/ 目录,用于后续的解压和安装操作
- name: step3
  get_url: url=http://nginx.org/download/nginx-1.24.0.tar.gz dest=/usr/local/src/

# 任务名称:step4
# 使用 unarchive 模块解压之前下载的 nginx 源代码压缩包到 /usr/local/src/ 目录,且指定文件已经在远程主机上(remote_src=yes)
- name: step4
  unarchive: src=/usr/local/src/nginx-1.24.0.tar.gz  dest=/usr/local/src/ remote_src=yes

# 任务名称:step6
# 使用 user 模块创建名为 nginx 的用户,设置其登录 shell 为 /sbin/nologin(禁止登录),并指定用户 ID 为 972,可能是为 nginx 服务运行创建特定用户身份
- name: step6
  user: name=nginx state=present shell=/sbin/nologin uid=972

# 任务名称:step7
# 使用 file 模块创建 /apps/nginx 目录,设置所有者为 nginx 用户,所属组为 nginx 组,并递归设置目录属性,可能是作为 nginx 的安装目录或数据存储目录
- name: step7
  file: path=/apps/nginx state=directory  owner=nginx group=nginx recurse=yes

# 任务名称:step8
# 使用 shell 模块在 /usr/local/src/nginx-1.24.0/ 目录下执行 nginx 的配置脚本,指定了一系列配置参数,如安装前缀、用户、组以及要启用的模块等,使用 /bin/bash 作为解释器
- name: step8
  shell:./configure --prefix=/apps/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module \
        --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre \
        --with-stream --with-stream_ssl_module --with-stream_realip_module
  args:
    chdir: /usr/local/src/nginx-1.24.0/
    executable: /bin/bash

# 任务名称:step9
# 使用 shell 模块在 /usr/local/src/nginx-1.24.0/ 目录下执行 make 命令,通常是根据上一步的配置进行编译操作
- name: step9
  shell: make
  args:
    chdir: /usr/local/src/nginx-1.24.0/

# 任务名称:step10
# 使用 shell 模块在 /usr/local/src/nginx-1.24.0/ 目录下执行 make install 命令,将编译好的 nginx 安装到指定的安装目录(/apps/nginx)
- name: step10
  shell: make install
  args:
    chdir: /usr/local/src/nginx-1.24.0/

# 任务名称:step11
# 使用 shell 模块创建一个符号链接,将 /apps/nginx/sbin/nginx 链接到 /usr/sbin/,方便在系统环境变量路径下直接执行 nginx 命令
- name: step11
  shell: ln -s /apps/nginx/sbin/nginx /usr/sbin/

# 任务名称:step12
# 使用 copy 模块将本地的 nginx.service 文件复制到远程主机的 /etc/systemd/system/ 目录下,设置所有者为 root,所属组为 root,权限为 0644,可能是用于配置 nginx 的 systemd 服务单元文件
- name: step12
  copy:
    src: /etc/ansible/installs/nginx.service
    dest: /etc/systemd/system/nginx.service
    owner: root
    group: root
    mode: '0644'

# 任务名称:step13
# 使用 shell 模块重新加载 systemd 的守护进程配置,使新添加或修改的服务单元文件生效
- name: step13
  shell: systemctl daemon-reload

# 任务名称:step14
# 使用 shell 模块启用 nginx 服务并立即启动它,使 nginx 开始在后台运行并在系统启动时自动启动
- name: step14
  shell: systemctl enable --now nginx
#nginx的service文件,用于systemd管理nginx编译安装的程序
# [Unit] 部分用于定义与 systemd 单元相关的通用信息
[Unit]
# 对该服务的简短描述,这里说明是 nginx 高性能 web 服务器
Description=nginx - high performance web server
# 提供关于该服务的文档链接,方便查阅更多关于 nginx 的详细文档信息
Documentation=http://nginx.org/en/docs/
# 表示在 network-online.target(网络在线目标)、remote-fs.target(远程文件系统目标)和 nss-lookup.target(名称服务查找目标)启动之后再启动此服务
After=network-online.target remote-fs.target nss-lookup.target
# 表示此服务依赖 network-online.target 目标,即希望该目标被激活,但不严格要求其启动完成
Wants=network-online.target

# [Service] 部分用于定义与服务相关的具体执行参数和行为
[Service]
# 服务类型为 forking,意味着该服务启动后会创建一个子进程,父进程退出,由子进程继续运行服务
Type=forking
# 指定 nginx 进程 ID 文件的路径,systemd 可通过该文件监控 nginx 进程状态
PIDFile=/apps/nginx/logs/nginx.pid
# 服务启动时执行的命令,启动 nginx 并指定配置文件路径
ExecStart=/apps/nginx/sbin/nginx -c /apps/nginx/conf/nginx.conf
# 服务重新加载配置时执行的命令,向 nginx 主进程发送 HUP 信号,使其重新加载配置文件
ExecReload=/bin/kill -s HUP $MAINPID
# 服务停止时执行的命令,向 nginx 主进程发送 TERM 信号,使其优雅地停止服务
ExecStop=/bin/kill -s TERM $MAINPID
# 设置服务可打开的文件描述符数量限制为 100000,以满足 nginx 可能的高并发文件操作需求
LimitNOFILE=100000

# [Install] 部分用于定义服务的安装信息,即服务在系统启动时的启动顺序和依赖关系
[Install]
# 表示该服务应在 multi-user.target(多用户目标)启动时被启动,即系统进入多用户模式时启动 nginx 服务
WantedBy=multi-user.target

包安装和测试结果:

ansible-playbook -e  nginx_var="pkg"  nginx.yaml #yum包安装nginx
systemctl enable --now nginx #开机启动nginx
systemctl status nginx#查看nginx状态

编译安装和测试结果

ansible-playbook -e  nginx_var="bin"  nginx.yaml #yum包安装nginx
systemctl status nginx#查看nginx状态

3.编写一个初始化主机的playbook,变量指定系统类型,roccky需要关闭selinux,ubuntu不需要
01. 初始化主机名
02. 替换yum源或apt源
03. 安装时间同步服务器,指向国内的服务器
04. 关闭防火墙,清理相关规则
05. 安装基本软件 vim 等
06. 修改时区为Asia/Shanghai
07. 初始化一个mage用户,拥有sudo权限 ALL=(ALL) NOPASSWD: ALL

ubuntu主机初始化程序

# 指定play的目标主机为node0,并且不收集目标主机的系统信息
- hosts: node0
  gather_facts: no
  tasks:
    # 任务1:将主机名设置为mage
    - name: task1
      shell: hostnamectl set-hostname mage

    # 任务2.1:删除/etc/apt/sources.list文件
    - name: task2.1
      file: path=/etc/apt/sources.list state=absent

    # 任务2.2:重新创建/etc/apt/sources.list文件(空文件)
    - name: task2.2
      shell: touch /etc/apt/sources.list

    # 任务2.3:在/etc/apt/sources.list文件中添加指定的阿里云的Ubuntu镜像源
    - name: task2.3
      lineinfile:
        path: /etc/apt/sources.list
        line: "{{ item }}"  # 使用循环中的每一项作为要添加的行
        state: present
      loop:
        - deb https://mirrors.aliyun.com/ubuntu/ noble main restricted universe multiverse
        - deb-src https://mirrors.aliyun.com/ubuntu/ noble main restricted universe multiverse
        - deb https://mirrors.aliyun.com/ubuntu/ noble-security main restricted universe multiverse
        - deb-src https://mirrors.aliyun.com/ubuntu/ noble-security main restricted universe multiverse
        - deb https://mirrors.aliyun.com/ubuntu/ noble-updates main restricted universe multiverse
        - deb-src https://mirrors.aliyun.com/ubuntu/ noble-updates main restricted universe multiverse
        - deb https://mirrors.aliyun.com/ubuntu/ noble-backports main restricted universe multiverse
        - deb-src https://mirrors.aliyun.com/ubuntu/ noble-backports main restricted universe multiverse

    # 任务3.1:安装chrony时间同步服务
    - name: task3.1
      shell: apt -y install chrony

    # 任务3.2:在/etc/chrony/chrony.conf文件中,在指定的行后添加阿里云的NTP服务器
    - name: task3.2
      lineinfile:
        path: /etc/chrony/chrony.conf
        line: "{{ item }}"  # 使用循环中的每一项作为要添加的行
        state: present
        insertafter: "server 10.0.0.8 iburst"  # 在指定行后插入
      loop:
        - server ntp.aliyun.com  iburst
        - server ntp1.aliyun.com  iburst
        - server ntp2.aliyun.com  iburst

    # 任务3.3:重启chronyd服务以应用配置更改
    - name: task3.3
      shell: systemctl restart chronyd

    # 任务4:禁用UFW防火墙
    - name: task4
      shell: sudo ufw disable

    # 任务5:安装vim编辑器
    - name: task5
      shell: apt -y install vim

    # 任务6:设置系统时区为Asia/Shanghai
    - name: task6
      shell: timedatectl set-timezone Asia/Shanghai

    # 任务7.1:创建一个名为mage的系统用户,不创建家目录,不分配登录shell
    - name: task7.1
      user: name=mage system=yes create_home=no shell=/sbin/nologin

    # 任务7.2:创建/etc/sudoers.d/mage文件(如果尚不存在)
    - name: task7.2
      shell: touch /etc/sudoers.d/mage

    # 任务7.3:在/etc/sudoers.d/mage文件中添加一行,允许mage用户无密码执行所有sudo命令
    - name: task7.3
      lineinfile:
        path: /etc/sudoers.d/mage
        line: "mage  ALL=(ALL) NOPASSWD: ALL"  # 允许mage用户无密码sudo
        state: present

测试结果

4.总结Open-VPN的部署安装过程和基本使用

OpenVPN的部署安装过程和基本使用可以总结如下:

一、部署安装过程
1. 安装准备
系统要求:OpenVPN可以在多种操作系统上运行,包括Linux、Windows、macOS等。确保服务器和客户端的系统兼容性。
关闭防火墙和SELinux:在安装之前,可能需要关闭服务器的防火墙和SELinux,以避免安装过程中的冲突。
安装依赖:根据操作系统,安装必要的依赖项,如vim、wget、gcc-c++、openssl等。
2. 安装OpenVPN和EasyRSA
下载并解压安装包:从OpenVPN官网下载OpenVPN和EasyRSA的安装包,并解压到指定目录。
编译并安装OpenVPN:进入OpenVPN的解压目录,执行编译和安装命令。
安装EasyRSA:EasyRSA用于生成和管理证书和密钥,是OpenVPN的重要组成部分。将EasyRSA解压并移动到合适的位置。
3. 配置服务端
生成证书和密钥:使用EasyRSA生成CA证书、服务器证书、客户端证书和Diffie-Hellman参数文件。
配置server.conf文件:编辑OpenVPN的服务端配置文件,指定协议、端口、证书和密钥路径、网络地址等。
启动OpenVPN服务:将OpenVPN服务设置为开机自启动,并立即启动服务。
4. 配置客户端
生成客户端证书和密钥:为每个客户端生成唯一的证书和密钥。
创建客户端配置文件:编辑客户端配置文件,指定客户端模式、远程服务器地址和端口、证书和密钥路径等。
下载并安装客户端软件:在客户端计算机上下载并安装OpenVPN客户端软件。
导入客户端配置文件:将客户端配置文件导入到OpenVPN客户端软件中,并连接VPN。
二、基本使用
1. 连接VPN
启动客户端软件:在客户端计算机上启动OpenVPN客户端软件。
导入并连接配置文件:导入之前生成的客户端配置文件,并尝试连接VPN。
验证连接:连接成功后,可以通过查看网络连接状态或使用ping命令来验证VPN连接是否成功。
2. 管理VPN连接
添加/删除客户端:在服务端,可以使用EasyRSA生成新的客户端证书和密钥,并将其添加到OpenVPN的配置中。同时,也可以删除不再需要的客户端配置。
修改服务端配置:根据需要,可以修改服务端的配置文件,如更改网络地址、添加路由等。
查看日志和状态:OpenVPN提供了详细的日志和状态信息,可以通过查看日志文件或状态页面来了解VPN的运行情况。

3. 注意事项
安全性:确保证书和密钥的安全存储,避免泄露给未经授权的用户。
网络配置:在配置VPN时,要确保服务端和客户端的网络配置正确无误,以避免连接失败或数据传输问题。
兼容性:确保服务端和客户端的OpenVPN版本兼容,以避免因版本不匹配而导致的问题。
总之,OpenVPN的部署安装过程需要仔细规划和执行,以确保VPN的稳定性和安全性。同时,在使用过程中也需要进行适当的管理和维护,以确保VPN的正常运行和用户体验。

1、在阿里云上购买实例web1、实例web2和实例open-vpn-server,其中open-vpn-server配有公网地址。在本地ssh客户端配置ssh无密码登录以后,在实例web1上安装apache,在实例web2上安装nignx,并分别设置访问页面。

# 通过SSH连接到主服务器并配置SSH无密码登录
ssh-keygen       # 生成SSH密钥对
ssh-copy-id 8.154.32.131  # 将公钥复制到主服务器,以便无密码登录
ssh-keygen       # 再次生成SSH密钥对
ssh-copy-id 172.30.0.101  # 将公钥复制到web1服务器
ssh-keygen       # 第三次生成SSH密钥对
ssh-copy-id 172.30.0.102  # 将公钥复制到web2服务器

# 在web1服务器上安装并配置Apache HTTPD
yum -y install httpd       # 安装Apache HTTPD
systemctl enable --now httpd  # 启用并启动Apache HTTPD服务
echo "welcome to web1!172.30.0.101" > /var/www/html/index.html  # 设置Apache默认首页内容
 
# 在web2服务器上安装并配置Nginx
yum -y install nginx       # 安装Nginx
systemctl enable --now nginx  # 启用并启动Nginx服务
echo "welcome to web2! 172.30.0.102" > /usr/share/nginx/html/index.html  # 设置Nginx默认首页内容

配置阿里云安全组件,设置允许访问TCP协议的1194端口、80端口、443端口,UDP协议的1194端口,开启的1194端口用于访问阿里云。

 2、在实例open-vpn-server上首先,配置软件源,安装openvpn和easy-rsa等软件。之后,依次生成CA证书、注册并颁发服务器证书和客户端证书, 配置systemd服务以管理OpenVPN。最后,编辑服务器端和客户端配置文件,重启openvpn服务器,设置ip转发和防火墙规则。

# 配置EPEL软件源并安装OpenVPN和Easy-RSA
vim /etc/yum.repos.d/epel.repo  # 编辑EPEL仓库配置文件
[epel]
name=EPEL
baseurl=https://mirrors.aliyun.com/epel/$releasever/Everything/$basearch
gpgcheck=0
enabled=1
yum -y install openvpn easy-rsa  # 安装OpenVPN和Easy-RSA
yum -y install lrzsz  nginx # 安装lrzsz和nginx,用于后续的文件传输
systemctl enable --now nginx #安装并启用nginx

# 配置Easy-RSA并生成CA证书和服务器证书
cp /usr/share/doc/easy-rsa/vars.example /etc/openvpn/easy-rsa/vars  # 复制Easy-RSA变量文件模板
vim  /etc/openvpn/easy-rsa/vars  # 编辑变量文件,设置CA证书有效期和证书有效期
cd /etc/openvpn/easy-rsa#切换指定目录
./easyrsa init-pki  # 初始化PKI
./easyrsa build-ca nopass  # 生成CA证书(无需密码)


# 生成服务器证书和密钥
./easyrsa gen-req server nopass  # 生成服务器证书请求(无需密码)
# 设置Common Name为openVPN
./easyrsa sign server server  # 签署服务器证书

#生成Diffie-Hellman参数
./easyrsa gen-dh  # 生成Diffie-Hellman参数
vim  /etc/openvpn/easy-rsa/vars  # 再次编辑变量文件,设置客户端证书有效期

# 生成客户端证书和密钥
./easyrsa gen-req wanji nopass  # 生成wanji客户端证书请求(无需密码)
./easyrsa sign client wanji  # 签署wanji客户端证书
./easyrsa gen-req wangxiaochun nopass  # 生成wangxiaochun客户端证书请求(无需密码)
./easyrsa sign client  wangxiaochun  # 签署wangxiaochun客户端证书


# 将生成的服务器证书和密钥复制到OpenVPN服务器相应的目录
cp /etc/openvpn/easy-rsa/pki/ca.crt /etc/openvpn/server/
cp /etc/openvpn/easy-rsa/pki/issued/server.crt /etc/openvpn/server
cp /etc/openvpn/easy-rsa/pki/private/server.key /etc/openvpn/server
cp /etc/openvpn/easy-rsa/pki/dh.pem /etc/openvpn/server

# 将生成的客户端证书和密钥及相关文件复制到OpenVPN客户端相应的目录
mkdir  /etc/openvpn/client/wanji
mkdir  /etc/openvpn/client/wangxiaochun
find -name "wanji*" -exec cp {} /etc/openvpn/client/wanji/ \;  # 查找并复制wanji相关的文件
find -name "wangxiaochun*" -exec cp {} /etc/openvpn/client/wangxiaochun/ \;  # 查找并复制wangxiaochun相关的文件
cp /etc/openvpn/server/ca.crt /etc/openvpn/client/wanji/  # 复制CA证书到wanji客户端目录
cp /etc/openvpn/server/ca.crt /etc/openvpn/client/wangxiaochun/  # 复制CA证书到wangxiaochun客户端目录

# 配置OpenVPN服务器
vim /etc/openvpn/server.conf  # 编辑OpenVPN服务器配置文件

# 指定服务器监听的端口号
port 1194
# 指定服务器使用的协议(TCP或UDP)
proto tcp
# 指定使用的隧道设备类型为TUN
dev tun
# 指定CA证书文件的位置
ca /etc/openvpn/server/ca.crt
# 指定服务器证书文件的位置
cert /etc/openvpn/server/server.crt
# 指定服务器私钥文件的位置
key /etc/openvpn/server/server.key
# 指定Diffie-Hellman参数文件的位置(用于增强安全性)
dh /etc/openvpn/server/dh.pem
# 指定服务器分配的IP地址范围和子网掩码
server 10.8.0.0 255.255.255.0
# 向客户端推送一条路由信息
push "route 172.30.0.0 255.255.255.0"
# 设置keepalive参数
keepalive 10 120
# 指定加密算法
cipher AES-256-CBC
# 指定压缩算法
compress lz4-v2
# 向客户端推送压缩算法设置
push "compress lz4-v2"
# 设置最大并发客户端连接数
max-clients 2048
# 指定运行OpenVPN进程的用户和组
user openvpn
group openvpn
# 指定状态日志文件的位置
status /var/log/openvpn/openvpn-status.log
# 指定日志文件的位置(追加模式)
log-append /var/log/openvpn/openvpn.log
# 设置日志详细级别
verb 3
# 对相同类别的信息只记录前20条到日志文件中
mute 20

getent passwd openvpn  # 检查openvpn用户是否存在
mkdir /var/log/openvpn  # 创建日志目录
chown openvpn.openvpn /var/log/openvpn  # 更改日志目录的所有权

vim /usr/lib/systemd/system/openvpn@.service# 配置systemd服务以管理OpenVPN

# [Unit] 部分定义了这个服务的元数据以及它与其他服务的依赖关系
[Unit]
# 服务的简短描述,%I 是一个占位符,它将在实例化服务时被替换为具体的实例名
Description=OpenVPN Robust And Highly Flexible Tunneling Application On %I
# 指定这个服务应该在 network.target 之后启动,确保网络服务已经可用
After=network.target
# [Service] 部分定义了如何启动、运行和停止这个服务
[Service]
# 服务的类型设置为 notify,这意味着服务会发送一个信号给 systemd,告知它已经成功启动
Type=notify
# 启用 PrivateTmp,这会为每个服务实例创建一个独立的临时文件目录,增加安全性
PrivateTmp=true
# 指定启动服务的命令,%i 是一个占位符,代表服务的实例名
ExecStart=/usr/sbin/openvpn --cd /etc/openvpn/ --config %i.conf
# [Install] 部分定义了如何安装这个服务,即如何将这个服务添加到系统的启动项中
[Install]
WantedBy=multi-user.target

systemctl daemon-reload  # 重新加载systemd配置
systemctl enable --now openvpn@server  # 启用并启动OpenVPN服务器服务

# 配置客户端OpenVPN配置文件
vim /etc/openvpn/client/wanji/client.ovpn  # 编辑wanji客户端配置文件
# 指定客户端模式
client
# 指定隧道设备类型为TUN
dev tun
# 指定使用的协议为TCP
proto tcp
# 指定VPN服务器的IP地址和端口号
remote 8.154.32.131 1194
# 设置解析重试次数为无限次
resolv-retry infinite
# 不绑定本地地址和端口
nobind
# 指定CA证书文件
ca ca.crt
# 指定客户端证书文件
cert wanji.crt
# 指定客户端私钥文件
key wanji.key
# 设置日志详细级别为3
verb 3
# 保持密钥文件在连接断开时不变
persist-key
# 保持隧道设备在连接断开时不变
persist-tun
# 允许具有相同CN的多个客户端连接
duplicate-cn 

vim /etc/openvpn/client/wangxiaochun/client.ovpn  # 编辑wangxiaochun客户端配置文件
# 指定客户端模式
client
# 指定隧道设备类型为TUN
dev tun
# 指定使用的协议为TCP
proto tcp
# 指定VPN服务器的IP地址和端口号
remote 8.154.32.131 1194
# 设置解析重试次数为无限次
resolv-retry infinite
# 不绑定本地地址和端口
nobind
# 指定CA证书文件
ca ca.crt
# 指定客户端证书文件
cert wangxiaochun.crt
# 指定客户端私钥文件
key wangxiaochun.key
# 设置日志详细级别为3
verb 3
# 保持密钥文件在连接断开时不变
persist-key
# 保持隧道设备在连接断开时不变
persist-tun
# 允许具有相同CN的多个客户端连接
duplicate-cn 

zip -r wanji.zip /etc/openvpn/client/wanji/ #打包wanji相关的客户端文件
sz wanji.zip #下载wanji相关的客户端文件

# 配置IP转发和防火墙规则
vim /etc/sysctl.conf  # 编辑sysctl配置文件,启用IP转发
sysctl -p  # 应用sysctl配置
echo 'iptables -t nat -A POSTROUTING -s 10.8.0.0/24 ! -d 10.8.0.0/24 -j MASQUERADE' >> /etc/rc.d/rc.local  # 添加防火墙规则到rc.local文件,以实现NAT转发

  3、在本地open-vpn-client,安装openvpn客户端,并测试访问结果。

# 使用yum包管理器安装openvpn
yum -y install openvpn
 
# 启动OpenVPN客户端守护进程,并指定配置文件、日志文件和目录
openvpn --config /path/to/client/config/client.ovpn --log-append /var/log/openvpn-client.log
 
# 进入/etc/openvpn/目录
cd /etc/openvpn/
 
# 使用rz命令从远程接收文件
rz wanji.zip
 
# 将wanji.zip解压后的内容移动到当前目录(/etc/openvpn/)下
mv wanji/* .

 4、设置安全增强功能,设置客户端的私钥密码、阻止Dos攻击和吊销客户端证书。

#新建客户端,并设置客户端私钥密码

# 生成客户端证书请求
./easyrsa gen-req deng

Enter PEM pass phrase:   
#输入两遍密码
Verifying - Enter PEM pass phrase: 
#输入两遍密码
Common Name (eg: your user, host, or server name) [magedu]:   #接受默认值,直接回车
 
# 签署客户端证书
./easyrsa sign client deng
 
# 创建客户端配置文件目录
mkdir /etc/openvpn/client/deng
 
# 复制客户端证书到配置目录
cp /etc/openvpn/easy-rsa/pki/issued/deng.crt /etc/openvpn/client/deng/
 
# 复制客户端私钥到配置目录。
cp /etc/openvpn/easy-rsa/pki/private/deng.key /etc/openvpn/client/deng/
 
# 复制CA证书和TLS密钥到客户端目录(但注意路径错误)
cp /etc/openvpn/server/{ca.crt,ta.key} /etc/openvpn/client/deng/ 
 
# 复制现有的客户端配置文件模板
cp /etc/openvpn/client/wangxiaochun/client.ovpn /etc/openvpn/client/deng/
 
# 编辑客户端配置文件
vim  /etc/openvpn/client/deng/client.ovpn

# 指定客户端模式
client
# 指定隧道设备类型为TUN
dev tun
# 指定使用的协议为TCP
proto tcp
# 指定VPN服务器的IP地址和端口号
remote 8.154.32.131 1194
# 设置解析重试次数为无限次
resolv-retry infinite
# 不绑定本地地址和端口
nobind
# 指定CA证书文件
ca ca.crt
# 指定客户端证书文件
cert deng.crt
# 指定客户端私钥文件
key deng.key
# 设置日志详细级别为3
verb 3
# 保持密钥文件在连接断开时不变
persist-key
# 保持隧道设备在连接断开时不变
persist-tun
# 允许具有相同CN的多个客户端连接
duplicate-cn 

#添加压缩文件并加密,下载压缩文件
zip -e  deng.zip /etc/openvpn/client/deng/*
sz  deng.zip


# 启用防止DoS攻击的安全增强配置
# 通过生成一个tls-auth密钥对来增强OpenVPN的安全性,这有助于防止DoS(拒绝服务)攻击
# 服务器端设置开始
 
# 生成tls-auth密钥文件,该文件将用于服务器和客户端之间的安全认证
openvpn --genkey --secret /etc/openvpn/server/ta.key
 
# 编辑OpenVPN服务器配置文件,以启用tls-auth功能
vim /etc/openvpn/server.conf
 
# 在server.conf文件中添加以下行,以指定tls-auth密钥文件,并设置服务器模式(0表示服务器)
tls-auth /etc/openvpn/server/ta.key 0
 
# 重启OpenVPN服务以应用更改
systemctl restart openvpn@server.service
 
# 实时查看OpenVPN的日志文件,以监控服务的启动和任何潜在的问题
tail -n 20 /var/log/openvpn/openvpn.log -f
 
# 客户端设置开始
 
# 编辑客户端的OpenVPN配置文件(client.ovpn),以包含tls-auth的配置
vim /etc/openvpn/client/wanji/client.ovpn

# 在client.ovpn文件中添加以下行,以指定tls-auth密钥文件,并设置客户端模式(1表示客户端)
tls-auth ta.key 1



# 撤销用户证书
# 使用easyrsa工具撤销名为wangxiaochun的用户的证书。这通常是在用户离开组织或证书被认为不再安全时进行的。
./easyrsa revoke wangxiaochun
 
# 生成证书撤销列表(CRL)
./easyrsa gen-crl
 
# 编辑OpenVPN服务器配置文件
vim /etc/openvpn/server.conf

crl-verify /etc/openvpn/easy-rsa/pki/crl.pem
# 在server.conf文件中添加以下行,以指定CRL文件的路径。
crl-verify /etc/openvpn/easy-rsa/pki/crl.pem
 
# 重启OpenVPN服务以应用更改
systemctl restart openvpn@server.service

Logo

一站式 AI 云服务平台

更多推荐