使用Bash脚本发送包含几天内到期的用户账号列表的电子邮件

原创
ithorizon 6个月前 (10-17) 阅读数 31 #Linux

使用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脚本,管理员可以轻松地监控系统中用户账号的有效期限,并及时采取措施。这有助于尽大概减少损耗系统保险性,降低潜在风险。期待本文提供的脚本示例能对您有所帮助。

本文由IT视界版权所有,禁止未经同意的情况下转发

文章标签: Linux


热门