02 Shell脚本模块化巡检系统并生成HTML报告

02 Shell脚本模块化巡检系统并生成HTML报告

学习目标

1. 理解Shell模块化编程:掌握如何将系统巡检脚本拆解成多个模块,每个模块负责特定功能,最终汇总为完整的巡检报告。 2. 学会常见系统信息收集:学习如何通过Shell脚本自动收集系统的基本信息,如操作系统版本、内存使用情况、磁盘使用情况等。 3. 掌握HTML报告生成:学会将系统巡检结果转换为HTML格式,生成美观且易于分享的报告。 4. 学会扩展和定制脚本:能够根据需求修改和扩展脚本,添加新的巡检项。

脚本整体介绍与使用

这些脚本集合了多个系统巡检和配置功能,旨在自动化收集系统信息、监控关键资源、检查安全性,并生成一份易于查看和分享的 HTML 格式报告。脚本遵循模块化设计原则,所有功能模块分开实现,易于扩展和维护。下面是本脚本的详细介绍与使用步骤。

脚本介绍

为什么要写这些脚本?

随着系统运维任务日益增多,手动检查系统健康状况、资源使用情况以及安全配置等变得繁琐且容易出错。为了提高运维效率,减少人为错误,自动化脚本应运而生。这个脚本的目的是通过模块化设计自动化收集系统信息、检查资源使用情况和安全性,并生成HTML格式的报告,方便系统管理员查看与分享。通过这种方式,脚本能够节省时间,简化操作,确保系统运行的稳定与安全。

这些脚本提供了什么功能?

这些脚本的主要功能包括:

1. 系统信息收集模块:自动收集系统的基本信息,如操作系统版本、内核版本、系统架构等。 2. 内存使用情况检查模块:检查系统内存的使用情况,包括总内存、已用内存、剩余内存等。 3. 磁盘使用情况检查模块:检查磁盘使用情况,显示磁盘挂载、使用率和剩余空间等。 4. 网络配置检查模块:收集网络接口信息、IP地址、路由信息及监听端口。 5. SSH公私钥检查模块:检查SSH公私钥的安全性。 6. 防火墙配置模块:配置Firewalld防火墙规则(可选)。 7. HTML报告生成模块:将收集到的系统信息生成HTML格式的巡检报告,便于查看和共享。 8. 主脚本:整合所有模块,执行系统巡检并生成最终报告。

这些脚本的基本运行说明

1. 为这些脚本添加执行权限: 通过命令为所有脚本文件添加执行权限:

chmod +x *.sh

命令说明:

./main.sh

命令说明:

开发周期

1. 阶段 1:需求分析与设计阶段(2天) 与企业沟通,明确脚本的功能需求和报告格式。 2. 阶段 2:模块开发(3天) 开发各个功能模块并进行单元测试,确保每个模块的功能正常。 3. 阶段 3:集成与优化(5天) 集成所有模块到主脚本中,进行集成测试并进行性能优化。 4. 阶段 4:部署与维护(长期) 将脚本部署到生产环境,并根据实际情况进行维护和优化。

脚本功能模块概述

[root@server ~]# tree
.
├── configure_firewalld.sh
├── disk_info.sh
├── firewalld_rules.conf
├── generate_html_report.sh
├── main.sh
├── memory_info.sh
├── network_info.sh
├── ssh_keys_check.sh
└── system_info.sh

0 directories, 9 files

系统信息收集模块 (system_info.sh)

该模块用于收集系统的基础信息,例如操作系统版本、内核版本、系统架构等,确保能够了解系统的基本状态。

内存使用情况检查模块 (memory_info.sh)

此模块用于检查系统的内存使用情况,包括总内存、已用内存、剩余内存等,帮助管理员了解内存资源的使用状况。

磁盘使用情况检查模块 (disk_info.sh)

此模块负责检查系统的磁盘使用情况,显示磁盘的挂载情况、使用率、剩余空间等信息,以帮助管理员监控磁盘空间的使用情况。

网络配置检查模块 (network_info.sh)

此模块检查系统的网络配置,包括网络接口、IP地址、路由信息以及当前的监听端口,帮助管理员评估系统的网络配置和安全状况。

SSH公私钥检查模块 (ssh_keys_check.sh)

该模块检查系统的SSH公私钥文件,评估其安全性,并报告是否存在潜在的安全风险。

防火墙配置模块 (configure_firewalld.sh)

此模块负责配置系统的防火墙规则。它通过配置文件定义哪些端口和IP可以访问系统,提供基础的安全防护。

HTML报告生成模块 (generate_html_report.sh)

该模块将所有收集到的系统信息转换为HTML格式,生成易于分享和查看的报告,方便在团队或其他相关方之间传播。

主脚本 (main.sh)

主脚本是执行系统巡检的核心,加载并调用其他模块,执行各个功能,最后生成完整的HTML报告。

脚本使用步骤

给脚本添加执行权限

首先,为每个脚本文件添加执行权限。可以通过以下命令为每个脚本添加执行权限:

chmod +x system_info.sh
chmod +x memory_info.sh
chmod +x disk_info.sh
chmod +x network_info.sh
chmod +x ssh_keys_check.sh
chmod +x generate_html_report.sh
chmod +x configure_firewalld.sh
chmod +x main.sh

命令作用:

执行结果:

关键参数:

注意事项:

./main.sh

命令说明:

#!/bin/bash

}


**关键参数:**

**注意事项:**



该模块将所有检查结果整合为HTML报告。

**编辑脚本**:

命令说明:

#!/bin/bash

}


**关键参数:**

**注意事项:**




首先,为每个脚本文件添加执行权限:

注意事项:

./main.sh

image

**注意事项:**





将脚本拆分为多个独立模块,并通过主脚本将这些模块组合起来:


该模块用于收集系统的基础信息,如操作系统版本、内核版本、系统架构等。

**编辑脚本**:

命令说明:

#!/bin/bash

}


**注意事项:**



该模块检查系统的内存使用情况,包括总内存、已用内存和交换空间。

**编辑脚本**:

命令说明:

#!/bin/bash

}


**注意事项:**



该模块检查系统的磁盘使用情况。

**编辑脚本**:

命令说明:

#!/bin/bash

}


**注意事项:**



该模块检查系统的网络配置信息。

**编辑脚本**:

命令说明:

#!/bin/bash

}


**注意事项:**



该模块检查SSH公私钥的安全性。

**编辑脚本**:

命令说明:

#!/bin/bash

SSH_DIR="$HOME/.ssh"

}


**注意事项:**



该模块将所有检查结果整合为HTML报告。

**编辑脚本**:

命令说明:

#!/bin/bash

}


**注意事项:**



主脚本将调用各个功能模块,并生成最终的HTML报告。

**编辑脚本**:

命令说明:

#!/bin/bash


**注意事项:**




首先,为每个脚本文件添加执行权限:

注意事项:

./main.sh

image

用浏览器打开system_audit_report.html查看系统巡检报告:

image
image
image

这个脚本是主要的执行脚本,加载并调用每个模块。

#!/bin/bash


**注意事项:**



在此文件中,可以定义要使用的防火墙规则:

命令说明:

EXTERNAL_INTERFACE=ens160

EXTERNAL_TCP_PORTS=( 500-600 666 ) EXTERNAL_UDP_PORTS=( 9030 10001-11200 )

EXTERNAL_ALLOWED_IPS=( 119.29.112.81 119.29.112.82 ) EXTERNAL_TCP_RICH_PORTS=( 666 1024-2012 22 36000 ) EXTERNAL_UDP_RICH_PORTS=( 2012-65535 666 )


**注意事项:**



此模块包含了Firewalld防火墙规则的配置部分。将简化并只配置内网和外网的基本策略。

注意事项:

#!/bin/bash

CFG="${1:-firewalld_rules.conf}" LOG="/tmp/firewalld_config.txt"

INTERFACE="${EXTERNAL_INTERFACE:-${INTERFACE:-}}"

add_ports(){ }

add_rich_ip_ports(){ }


**注意事项:**




首先,为每个脚本文件添加执行权限:

注意事项:

./main.sh

image
image
image
image
image

#!/bin/bash

CFG="${1:-firewalld_rules.conf}" LOG="/tmp/firewalld_remove.txt"

INTERFACE="${EXTERNAL_INTERFACE:-${INTERFACE:-}}"

remove_ports(){ }

remove_rich_ip_ports(){ }

sources: services: protocols: forward-ports: source-ports: icmp-blocks: sources: services: ports: protocols: forward-ports: source-ports: icmp-blocks:


**命令拆解:**

| 命令部分 | 重要程度 | 详细解释 |
|---|---|---|
| `--zone=public` | 【普通】 | 长参数 `--zone` 的值是 `public`,用于精确控制命令行为。 |

**注意事项:**








作业要求:  




集成要求:



作业要求:  




集成要求: