每天解析一个脚本(二)

简介: 【4月更文挑战第14天】shell脚本解析及训练(二)

在当今数字化时代,运维工作的重要性日益凸显。面对复杂多变的IT环境,高效的自动化工具和脚本成为每一位运维人员提升工作效率、保障系统稳定的关键利器。为了助力广大运维同行在日常工作中更加得心应手,我特此精心整理了一份实用的Shell脚本合集,旨在为大家提供一份“运维人的福利”,以期在繁琐的任务处理与系统管理中,助您一臂之力。

这份脚本集合凝聚了我个人在实际运维工作中积累的经验与智慧,涵盖了诸如服务器监控、故障排查、备份恢复、性能调优、自动化部署等诸多核心场景。每一行代码都经过实战打磨,力求简洁高效,易读易用,旨在适应各种复杂的运维环境,满足不同层次运维需求。无论您是初入运维领域的新人,还是经验丰富的资深专家,都能从中找到适合自己的工具,让繁杂的运维工作化繁为简,事半功倍。

在这里,我诚挚地邀请各位运维同仁随意拿取、自由分享这份Shell脚本资源。它们不仅是您日常工作的得力助手,更是交流学习、提升技能的良好素材。让我们共同携手,借助科技的力量,驱动运维工作的智能化、自动化进程,为构建稳定、高效的信息系统保驾护航。

今天我们要分析的是:

zabbix 监控用户密码过期 用于 Zabbix 监控 Linux 系统用户(shell 为 /bin/bash 和 /bin/sh)密码过期,密码有效期剩余 7 天触发加自动发现用户。

#!/bin/bash

diskarray=(`awk -F':' 'NF ~ /\/bin\/bash/||/\/bin\/sh/{printNF ~ /\/bin\/bash/||/\/bin\/sh/{printNF ~ /\/bin\/bash/||/\/bin\/sh/{print 1}' /etc/passwd`)

length=${#diskarray[@]}

printf "{\n"

printf '\t'"\"data\":["

for ((i=0;i<$length;i++))

do

printf '\n\t\t{'

printf "\"{#USER_NAME}\":\"{diskarray[{diskarray[{diskarray[i]}\"}"

if [ i−lti -lt [$length-1] ];then

printf ','

fi

done

printf "\n\t]\n"

printf "}\n"

检查用户密码过期

#!/bin/bash

export LANG=en_US.UTF-8

SEVEN_DAYS_AGO=$(date -d '-7 day' +'%s')

user="$1"

# 将Sep 09, 2018格式的时间转换成unix时间

expires_date=(sudochage−l(sudo chage -l user | awk -F':' '/Password expires/{print $NF}' |

sed -n 's/^ //p')

if [[ "$expires_date" != "never" ]];then

expires_date=(date−d"(date -d "expires_date" +'%s')

if [ "expiresdate"−le"expires_date" -le "SEVEN_DAYS_AGO" ];then

echo "1"

else

echo "0"

fi

else

echo "0"

fi

这个脚本由两部分组成:第一部分用于生成Zabbix自动发现规则所需的JSON数据,列出具有/bin/bash或/bin/sh shell的Linux系统用户;第二部分是一个独立脚本,用于检查给定用户的密码是否将在7天内过期。下面分别解释这两个脚本的实现过程和使用方法。

第一部分:生成Zabbix自动发现规则JSON数据

脚本功能: 生成包含符合条件(shell为/bin/bash或/bin/sh)的Linux系统用户的JSON数据,供Zabbix自动发现规则使用。

实现过程:

  1. 提取符合条件的用户列表:
  • 使用awk命令从/etc/passwd文件中筛选出shell为/bin/bash/bin/sh的用户,提取其用户名(第1列),存储到数组diskarray中。
  1. 计算用户数量:
  • 获取数组diskarray的长度,赋值给变量length
  1. 构建JSON输出:
  • 使用printf命令按JSON格式输出数据。
  • 开始输出JSON对象,包含一个名为"data"的数组。
  • 遍历数组diskarray,对每个用户:
  • 输出一个包含键"{#USER_NAME}"和用户名称作为值的JSON对象。
  • 若不是最后一个用户,添加逗号以保持JSON格式正确。
  • 结束"data"数组和整个JSON对象。

如何使用:

  1. 将生成的JSON数据作为Zabbix自动发现规则的“Key”参数:
  • 在Zabbix Web界面中,创建一个新的自动发现规则。
  • 在“Key”字段中粘贴执行第一部分脚本得到的JSON文本。
  • 设置其他必要参数(如主机、间隔等),并保存规则。

第二部分:检查用户密码过期

脚本功能: 接收一个用户参数,判断该用户的密码是否将在7天内过期,并返回结果(1表示即将过期,0表示未过期或密码永不过期)。

实现过程:

  1. 设置环境变量:
  • 设置LANGen_US.UTF-8,确保日期时间处理的国际化兼容性。
  1. 计算7天前的Unix时间戳:
  • 使用date命令获取当前时间减去7天的Unix时间戳,赋值给变量SEVEN_DAYS_AGO
  1. 获取用户密码过期日期:
  • 使用sudo chage -l $user命令查询指定用户的密码信息。
  • 通过awksed提取出“Password expires”行的日期部分。
  1. 判断并输出结果:
  • 检查提取的日期是否为“never”,如果是,则说明密码永不过期,输出0。
  • 否则,将日期转换为Unix时间戳(expires_date),并与7天前的时间戳比较。
  • 如果expires_date小于等于SEVEN_DAYS_AGO,说明密码将在7天内过期,输出1。
  • 否则,密码不会在7天内过期,输出0。

如何使用:

  1. 作为Zabbix监控项的“Key”参数:
  • 在Zabbix Web界面中,创建一个新的监控项。
  • 在“Key”字段中输入如下格式的命令(替换为实际用户名):
  • Bash
1check_password_expire.sh <username>
  • 设置其他必要参数(如主机、类型、信息类型等),并保存监控项。
  1. 关联触发器:
  • 创建一个触发器,使用刚创建的监控项作为条件,当值等于1时触发告警,表示该用户的密码将在7天内过期。

这两个脚本配合使用,可以实现对具有特定shell类型的Linux系统用户的密码过期情况进行Zabbix监控。第一部分脚本生成自动发现规则所需的JSON数据,用于自动发现需要监控的用户。第二部分脚本作为监控项的“Key”,判断指定用户的密码是否将在7天内过期,并通过触发器触发告警。

如果想上手操作练代码的同学们可以通过阿里云ecs服务器免费试用参与!

入口:新老同学免费试用

目录
相关文章
|
10月前
|
数据挖掘 vr&ar C++
让UE自动运行Python脚本:实现与实例解析
本文介绍如何配置Unreal Engine(UE)以自动运行Python脚本,提高开发效率。通过安装Python、配置UE环境及使用第三方插件,实现Python与UE的集成。结合蓝图和C++示例,展示自动化任务处理、关卡生成及数据分析等应用场景。
914 5
|
10月前
|
Android开发 开发者 Python
通过标签清理微信好友:Python自动化脚本解析
微信已成为日常生活中的重要社交工具,但随着使用时间增长,好友列表可能变得臃肿。本文介绍了一个基于 Python 的自动化脚本,利用 `uiautomator2` 库,通过模拟用户操作实现根据标签批量清理微信好友的功能。脚本包括环境准备、类定义、方法实现等部分,详细解析了如何通过标签筛选并删除好友,适合需要批量管理微信好友的用户。
383 7
|
设计模式 存储 人工智能
深度解析Unity游戏开发:从零构建可扩展与可维护的游戏架构,让你的游戏项目在模块化设计、脚本对象运用及状态模式处理中焕发新生,实现高效迭代与团队协作的完美平衡之路
【9月更文挑战第1天】游戏开发中的架构设计是项目成功的关键。良好的架构能提升开发效率并确保项目的长期可维护性和可扩展性。在使用Unity引擎时,合理的架构尤为重要。本文探讨了如何在Unity中实现可扩展且易维护的游戏架构,包括模块化设计、使用脚本对象管理数据、应用设计模式(如状态模式)及采用MVC/MVVM架构模式。通过这些方法,可以显著提高开发效率和游戏质量。例如,模块化设计将游戏拆分为独立模块。
739 3
|
XML Web App开发 数据挖掘
Postman接口测试工具全解析:功能、脚本编写及优缺点探讨
文章详细分析了Postman接口测试工具的功能、脚本编写、使用场景以及优缺点,强调了其在接口自动化测试中的强大能力,同时指出了其在性能分析方面的不足,并建议根据项目需求和个人偏好选择合适的接口测试工具。
506 1
|
Java Shell Linux
【Linux入门技巧】新员工必看:用Shell脚本轻松解析应用服务日志
关于如何使用Shell脚本来解析Linux系统中的应用服务日志,提供了脚本实现的详细步骤和技巧,以及一些Shell编程的技能扩展。
265 0
【Linux入门技巧】新员工必看:用Shell脚本轻松解析应用服务日志
|
弹性计算 运维 Shell
每天解析一个shell脚本(75)
【4月更文挑战第28天】shell脚本解析及训练(75)
85 7
|
弹性计算 运维 Shell
每天解析一个shell脚本(76)
【4月更文挑战第28天】shell脚本解析及训练(76)
81 4
|
缓存 监控 安全
深入解析Elasticsearch中脚本原理
深入解析Elasticsearch中脚本原理

热门文章

最新文章

推荐镜像

更多
  • DNS