告别密码过期困扰,一键部署Bash脚本,智能监控密码过期风险

系统 Linux 运维
如果你也因为密码过期而头疼过,那么今天这篇文章肯定能帮到你。让我们从根源上解决这个问题,用一行命令和一小段Bash脚本来监控 Linux 密码过期的风险,并提前发出警告!

早上,办公室的咖啡味还没散去,运维工程师小李就发现系统里突然出现了很多工单。原来是一个重要账号的密码过期了,导致自动化任务无法运行。大屏幕上不断闪烁的报警信息像是在提醒大家:密码过期的问题不能忽视。

如果你也因为密码过期而头疼过,那么今天这篇文章肯定能帮到你。让我们从根源上解决这个问题,用一行命令和一小段Bash脚本来监控 Linux 密码过期的风险,并提前发出警告!

为何需监控密码过期?

在实际运维管理中,定期更改密码可以有效降低系统风险,但这也会带来不少麻烦:

  • 自动任务中断:脚本或备份程序依赖账号登录,密码过期直接导致任务失败。
  • 服务不可用:关键服务因密码问题而中断,可能会引发业务停摆。
  • 运维效率下降:紧急处理密码问题往往耗费大量人力、时间和资源。

因此,建立一套自动化、智能化的密码过期监控方案,不仅可以提前预警,还能大幅提升系统稳定性和运维效率。

自动化密码过期监控方案

(1) 工作原理

整个方案基于Linux内置的chage 命令,实现如下几大功能:

  • 信息采集:使用 chage -l <用户名> 获取密码有效期信息。
  • 时间计算:利用 date 工具将密码过期时间转换为 UNIX 时间戳,计算剩余天数。
  • 触发提醒:当剩余天数低于阈值(例如 7 天)时,自动发送邮件、记录日志。

(2) 所需工具

  • chage:查询用户密码状态的命令。
  • chpasswd: 修改用户密码。
  • date:进行日期与时间转换。
  • mail:邮件提醒工具(可选)。
  • cron:定时任务调度,实现自动运行。

轻松部署密码预警

先设置几个变量,然后在整个脚本里都能用。

# 配置区域:根据实际需求修改以下变量
USERS=("root" "user2" "user3")  # 需要监控的用户数组
WARNING_DAYS=7                   # 提前预警天数
LOG_FILE="/var/log/password_change.log"
PASSWORD_LENGTH=16               # 生成密码长度
MAIL_NOTIFY="admin@example.com"  # 通知邮箱(需先配置邮件服务)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

定义一个函数,它的主要功能就是生成密码。

# 密码生成函数(兼容没有pwgen的环境)
generate_password() {
    # 方法1:使用openssl生成(默认)
    openssl rand -base64 20 | tr -dc 'a-zA-Z0-9!@#$%^&*()_+' | head -c${PASSWORD_LENGTH}
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

为了后面记录日志方便,咱们定义一个专门用来记日志的函数。

# 日志记录函数
log_message() {
    local timestamp=$(date "+%Y-%m-%d %H:%M:%S")
    echo "[${timestamp}] $1" >> "${LOG_FILE}"
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

主函数先用chage -l命令获取用户账户的信息,然后用grep和cut工具找出过期时间。接着计算距离过期还有多少天,如果这个天数少于预先设定的天数,就更新用户的密码。

# 主程序
for USERNAME in"${USERS[@]}"; do
    # 检查用户是否存在
    if ! id"${USERNAME}" &>/dev/null; then
        log_message "[${USERNAME}] 错误:用户不存在"
        continue
    fi

    # 获取密码过期信息
    password_info=$(chage -l "${USERNAME}" 2>/dev/null)
    if [ $? -ne 0 ]; then
        log_message "[${USERNAME}] 错误:无法获取密码策略信息"
        continue
    fi

    # 解析过期时间
    expiry_line=$(grep 'Password expires' <<< "${password_info}" | cut -d':' -f2 | sed 's/^ *//;s/ *$//')

    if [[ "${expiry_line}" == "never" ]]; then
        log_message "[${USERNAME}] 密码永不过期"
        continue
    fi

    # 转换为时间戳
    expiry_ts=$(date -d "${expiry_line}" +%s 2>/dev/null)
    if [[ -z "${expiry_ts}" ]]; then
        log_message "[${USERNAME}] 错误:无法解析过期时间 '${expiry_line}'"
        continue
    fi

    # 计算剩余天数
    current_ts=$(date +%s)
    days_left=$(( (expiry_ts - current_ts) / 86400 ))

    if (( days_left > WARNING_DAYS )); then
        log_message "[${USERNAME}] 密码状态正常,剩余天数:${days_left}"
        continue
    fi

    # 密码修改流程
    log_message "[${USERNAME}] 开始密码修改流程,剩余天数:${days_left}"
    
    # 生成新密码
    new_password=$(generate_password)
    if [ -z "${new_password}" ]; then
        log_message "[${USERNAME}] 错误:密码生成失败"
        continue
    fi

    # 修改密码(兼容不同发行版)
    ifecho"${USERNAME}:${new_password}" | chpasswd 2>/dev/null; then
        log_message "[${USERNAME}:{$new_password}] 密码修改成功"
        
        # 发送邮件通知(需要配置mailutils/postfix)
        if [ -n "${MAIL_NOTIFY}" ]; then
            echo"[${USERNAME}] 密码已自动重置" | mail -s "密码变更通知""${MAIL_NOTIFY}"
        fi

        # 更新最后修改日期(可选)
        chage --lastday 0 "${USERNAME}"
    else
        log_message "[${USERNAME}] 错误:密码修改失败"
    fi
done

exit 0
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.

结合 Cron 实现周期检测

为了让系统自动检测密码状态,我们只需要将该脚本添加到定时任务中。示例:

# 编辑定时任务
crontab -e

# 添加如下行,每天早上8点检测用户 "admin" 的密码状态
0 8 * * * /path/to/auto_update_expired_passwords.sh  2>&1
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

通过这一配置,你的系统将每天自动运行检测,并记录日志,确保每个关键账号都受到监控。

总结

在运维工作里,小细节往往能决定最终结果的好坏。一个简单好用的密码到期提醒脚本,可以帮你大大减少出问题的风险。不管是处理自动化任务、查看系统日志还是维护重要服务,如果能提前收到警告,就能省下很多紧急修复的时间,保证系统稳定运行。

赶紧动手试试这个方法吧,让你更好地管理Linux系统!也别忘了把这篇文章收藏并分享给其他人,帮助更多的朋友解决密码过期带来的麻烦,一起迈向更智能的运维之路!

责任编辑:赵宁宁 来源: 攻城狮成长日记
相关推荐

2021-01-03 09:33:48

密码数字身份加密解密

2010-10-29 11:45:09

oracle用户密码

2010-04-29 09:16:16

Oracle密码过期处

2013-10-08 10:07:58

2011-04-15 09:11:21

2009-10-28 13:58:35

Oracle密码过期

2015-11-03 15:29:49

ONOS开放网络操作系统SDN

2024-11-25 18:53:55

Linux

2025-03-07 10:50:59

脚本SSH信任服务器

2019-04-26 19:30:45

微软Windows密码过期

2017-08-31 15:57:53

数据Oracle用户密码

2023-08-02 11:39:21

SSL证书过期

2010-09-26 15:16:16

俄罗斯破解WiFi密码软件

2023-06-15 10:00:00

Jenkins任务操作

2021-05-20 10:36:30

Chrome浏览器系统技巧

2020-09-01 14:28:41

ChromeGoogle浏览器

2025-04-02 09:10:00

LinuxShell脚本

2013-08-06 18:01:30

2019-10-09 14:47:26

人工智能AI

2024-04-08 13:59:03

大模型Replicate
点赞
收藏

51CTO技术栈公众号