Linux服务器使用Ansible进行资源审计的核心是通过SSH自动采集、比对、报告关键系统状态,聚焦硬件资源、软件服务、安全配置、用户权限等可量化指标,输出结构化JSON结果以支持合规与异常识别。

Linux 服务器使用 Ansible 进行资源审计,核心是自动采集、比对、报告关键系统状态,而非人工逐台登录检查。它不依赖代理,通过 SSH 执行标准化任务,输出结构化结果,便于跟踪变化、识别异常和满足合规要求。
明确审计目标再动手
资源审计不是“全盘扫描”,而是聚焦可量化、可验证的指标。常见方向包括:
- 硬件与系统资源:CPU 架构、内存总量、磁盘容量与使用率、挂载点类型(如是否启用 noatime)、内核版本
- 软件与服务状态:已安装关键包(如 openssh-server、curl、rsync)、运行中服务(sshd、firewalld)、开机自启项
- 安全基线配置:SSH 是否禁用密码登录、root 是否禁止远程登录、防火墙是否启用、关键日志是否轮转
- 用户与权限:是否存在 UID=0 的非 root 用户、sudoers 中是否有宽泛权限(如 NOPASSWD: ALL)、最近登录用户列表
建议先列出你所在环境必须审计的条目(例如等保或内部运维规范),再编写对应任务。
用 Playbook 实现标准化采集
一个轻量但实用的审计 Playbook(audit_resources.yml)示例:
---
- name: Linux 资源与安全配置审计
hosts: all
gather_facts: yes
tasks:
- name: 记录主机基本信息
set_fact:
audit_report:
hostname: "{{ ansible_hostname }}"
ip: "{{ ansible_default_ipv4.address }}"
os: "{{ ansible_distribution }} {{ ansible_distribution_version }}"
kernel: "{{ ansible_kernel }}"
arch: "{{ ansible_architecture }}"
- name: 获取内存总量(MB)
command: free -m | awk 'NR==2{print $2}'
register: mem_total
changed_when: false
- name: 获取根分区使用率(%)
command: df / | awk 'NR==2{print $5}' | sed 's/%//'
register: root_usage
changed_when: false
- name: 检查 SSH 密码认证是否关闭
lineinfile:
path: /etc/ssh/sshd_config
regexp: '^PasswordAuthentication'
state: absent
check_mode: yes
register: ssh_pwd_disabled
- name: 获取当前运行的 SSH 服务状态
service_facts: {}
register: service_facts
- name: 汇总审计结果到文件
copy:
content: |
{{ audit_report | to_nice_json }}
memory_mb: {{ mem_total.stdout | int }}
root_usage_percent: {{ root_usage.stdout | int }}
ssh_password_auth_disabled: {{ ssh_pwd_disabled.found | default(false) | bool }}
sshd_running: {{ service_facts.ansible_facts.services['sshd'].state == 'running' }}
dest: "/tmp/audit_{{ ansible_date_time.date }}_{{ ansible_hostname }}.json"
delegate_to: localhost✅ 关键点:
linux-sysadmin下载Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
gather_facts: yes自动获取基础信息(无需手动写命令);- 所有
command任务加changed_when: false,避免误标为“变更”;check_mode: yes用于只读检查(如确认某行是否存在),不修改配置;- 结果统一输出为 JSON,方便后续解析或导入监控平台。
批量执行与结果汇总
-
运行审计任务
ansible-playbook -i inventory.ini audit_resources.yml --limit production
-
拉取各节点审计文件到本地
ansible all -i inventory.ini -m fetch -a "src=/tmp/audit_*.json dest=./audits/"
-
快速比对差异(例如检查哪些节点 root 分区超 85%)
jq -r 'select(.root_usage_percent > 85) | "\(.hostname) \(.ip) \(.root_usage_percent)%"' ./audits/*/*.json 2>/dev/null
-
生成 HTML 报告(可选)
使用ansible-cmdb工具(需额外安装):ansible-cmdb -t html_fancy --fact-cache-dir ./audits/ > report.html
结合角色与变量提升复用性
- 将审计逻辑封装为 Ansible Role(如
roles/system_audit),不同环境调用时只需覆盖变量:# group_vars/production.yml audit_thresholds: root_usage_warn: 85 memory_min_mb: 2048
- 在 Playbook 中引用角色并传入阈值,让同一套代码适配测试/生产环境。
不复杂但容易忽略:审计本身不修复问题,它只是“照镜子”。真正价值在于把 audit_resources.yml 加入 CI 流程或定时任务(如每天凌晨跑一次),配合告警(如 Slack 或邮件通知超标项),才能形成闭环。


















