使用Bash脚本发送包含几天内到期的用户账号列表的电子邮件
原创使用Bash脚本发送包含几天内到期的用户账号列表的电子邮件
在维护一个大型系统时,跟踪用户账号的有效期限是一项重要的任务。为了确保系统保险,及时更新用户权限,管理员需要定期检查哪些用户账号即将到期。本文将介绍怎样使用Bash脚本自动生成一个包含几天内到期的用户账号列表,并通过电子邮件发送给指定的管理员。
### 脚本概述
本脚本将执行以下步骤:
1. 查询系统中所有用户账号的有效期限。
2. 筛选出在指定天数内到期的用户账号。
3. 将筛选出的用户账号列表生成一个文本文件。
4. 使用电子邮件客户端发送包含该文本文件的电子邮件。
### 环境准备
在起初编写脚本之前,请确保以下环境已正确配置:
- Bash环境
- 查询用户账号有效期限的命令(例如,使用`chage`命令)
- 电子邮件发送工具(例如,`mail`或`sendmail`)
### 编写脚本
以下是一个单纯的Bash脚本示例,实现了上述功能:
bash
#!/bin/bash
# 设置邮件主题
subject="警告:以下用户账号将在几天内到期"
# 设置邮件接收者
recipient="admin@example.com"
# 设置筛选到期的天数
expiry_days=7
# 创建用户账号列表文件
list_file="accounts_expiry_list.txt"
# 清空旧的用户账号列表文件
> "$list_file"
# 查询所有用户账号的有效期限并筛选出即将到期的用户账号
while IFS= read -r line; do
# 获取用户名
username=$(echo "$line" | awk '{print $1}')
# 获取账号到期时间
expiry_date=$(chage -l "$username" | grep "Account expires" | awk '{print $3, $4, $5, $6}')
# 计算到期天数
today=$(date +%s)
expiry_time=$(date -d "$expiry_date" +%s)
diff=$((expiry_time - today))
diff_days=$((diff / 86400))
# 如果到期天数小于设置的天数,则添加到用户账号列表文件
if [ "$diff_days" -le "$expiry_days" ]; then
echo "$username - $expiry_date" >> "$list_file"
fi
done < /etc/passwd
# 检查是否有用户账号即将到期
if [ -s "$list_file" ]; then
# 使用mail命令发送电子邮件
mail -s "$subject" "$recipient" < "$list_file"
echo "邮件已发送至 $recipient"
else
echo "没有找到即将到期的用户账号"
fi
# 删除用户账号列表文件
rm -f "$list_file"
### 脚本说明
1. 首先,设置邮件主题和接收者。
2. 接着,定义筛选到期的天数。
3. 创建一个空的用户账号列表文件。
4. 使用`while`循环读取`/etc/passwd`文件中的用户账号信息。
5. 对于每个用户账号,使用`chage`命令获取账号到期时间,并计算到期天数。
6. 如果到期天数小于设置的天数,则将用户账号信息添加到用户账号列表文件。
7. 检查用户账号列表文件是否为空,如果不为空,则使用`mail`命令发送电子邮件。
8. 最后,删除用户账号列表文件。
### 使用脚本
1. 将上述脚本保存为一个文件,例如`check_expiry.sh`。
2. 给脚本文件添加执行权限:`chmod +x check_expiry.sh`。
3. 定期运行脚本,例如使用`cron`定时任务。
### 总结
通过使用Bash脚本,管理员可以轻松地监控系统中用户账号的有效期限,并及时采取措施。这有助于尽大概减少损耗系统保险性,降低潜在风险。期待本文提供的脚本示例能对您有所帮助。