在当今数字化时代,运维工作的重要性日益凸显。面对复杂多变的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自动发现规则使用。
实现过程:
- 提取符合条件的用户列表:
- 使用
awk
命令从/etc/passwd
文件中筛选出shell为/bin/bash
或/bin/sh
的用户,提取其用户名(第1列),存储到数组diskarray
中。
- 计算用户数量:
- 获取数组
diskarray
的长度,赋值给变量length
。
- 构建JSON输出:
- 使用
printf
命令按JSON格式输出数据。 - 开始输出JSON对象,包含一个名为"data"的数组。
- 遍历数组
diskarray
,对每个用户:
- 输出一个包含键"{#USER_NAME}"和用户名称作为值的JSON对象。
- 若不是最后一个用户,添加逗号以保持JSON格式正确。
- 结束"data"数组和整个JSON对象。
如何使用:
- 将生成的JSON数据作为Zabbix自动发现规则的“Key”参数:
- 在Zabbix Web界面中,创建一个新的自动发现规则。
- 在“Key”字段中粘贴执行第一部分脚本得到的JSON文本。
- 设置其他必要参数(如主机、间隔等),并保存规则。
第二部分:检查用户密码过期
脚本功能: 接收一个用户参数,判断该用户的密码是否将在7天内过期,并返回结果(1表示即将过期,0表示未过期或密码永不过期)。
实现过程:
- 设置环境变量:
- 设置
LANG
为en_US.UTF-8
,确保日期时间处理的国际化兼容性。
- 计算7天前的Unix时间戳:
- 使用
date
命令获取当前时间减去7天的Unix时间戳,赋值给变量SEVEN_DAYS_AGO
。
- 获取用户密码过期日期:
- 使用
sudo chage -l $user
命令查询指定用户的密码信息。 - 通过
awk
和sed
提取出“Password expires”行的日期部分。
- 判断并输出结果:
- 检查提取的日期是否为“never”,如果是,则说明密码永不过期,输出0。
- 否则,将日期转换为Unix时间戳(
expires_date
),并与7天前的时间戳比较。
- 如果
expires_date
小于等于SEVEN_DAYS_AGO
,说明密码将在7天内过期,输出1。 - 否则,密码不会在7天内过期,输出0。
如何使用:
- 作为Zabbix监控项的“Key”参数:
- 在Zabbix Web界面中,创建一个新的监控项。
- 在“Key”字段中输入如下格式的命令(替换
为实际用户名):
- Bash
1check_password_expire.sh <username>
- 设置其他必要参数(如主机、类型、信息类型等),并保存监控项。
- 关联触发器:
- 创建一个触发器,使用刚创建的监控项作为条件,当值等于1时触发告警,表示该用户的密码将在7天内过期。
这两个脚本配合使用,可以实现对具有特定shell类型的Linux系统用户的密码过期情况进行Zabbix监控。第一部分脚本生成自动发现规则所需的JSON数据,用于自动发现需要监控的用户。第二部分脚本作为监控项的“Key”,判断指定用户的密码是否将在7天内过期,并通过触发器触发告警。
如果想上手操作练代码的同学们可以通过阿里云ecs服务器免费试用参与!
入口:新老同学免费试用