密码过期卡登录?看我用Expect实现无人值守批量修改

原文链接: https://mp.weixin.qq.com/s?__biz=MjM5OTc5MjM4Nw==&mid=2457389196&idx=1&sn=ccc62b0aa6ac8ca2ad1cfbe3cf5b568c

密码过期卡登录?看我用Expect实现无人值守批量修改

原创 didiplus 攻城狮成长日记 2025-07-11 07:12

为了确保安全并符合规范,我们通常会在生产环境中设定用户密码每90天更新一次,这样做有助于减少密码被泄露或遭受暴力破解的风险。如果您希望在密码到期前就进行更改,可以利用Ansible中的user模块来批量处理这一任务。而当密码真的过期了,在您尝试登录服务器时,系统会友好地提示您先修改密码,之后才能继续使用系统哦。如下所示:

WARNING: Your password has expired.
You must change your password now and login again!
Changing password for didiplus.
Current password: 

那么,遇到这种情况时,我们该如何进行批量处理呢?有一种工具叫做Expect,它能够帮助我们解决这个问题。不过,可能有些人还不太了解Expect具体是什么,接下来就让我为您简单介绍一下吧。

什么Expect命令

Expect

是一个基于

Tcl

的自动化交互工具,由

Don Libes

在1990年创建,专门用于处理需要用户交互的命令行程序自动化。它的核心功能是模拟用户输入和响应程序输出,特别适合处理

SSH

登录、

FTP

传输、密码修改等需要人工交互的场景。

Expect核心命令

基础命令结构

#!/usr/bin/expect -f

# 设置超时时间(秒)
settimeout30

# 启动交互程序
spawn 要监控的程序

# 交互控制
expect{
"模式1"{ 动作1 }
"模式2"{ 动作2 }
timeout{ 超时处理 }
}

# 发送指令
send "指令\r"

# 结束交互
expect eof

关键命令详解

  • spawn:启动新的交互进程

  • expect:等待特定模式出现

  • send:向进程发送字符串

  • interact:将控制权交还给用户

  • exp_continue:继续匹配后续模式

  • set timeout:设置等待超时时间

实战案例

管理200台Linux服务器,密码策略设置为90天强制修改,并且密码彻底过期了。要求强制修改后才能成功登录系统。

密码过期卡登录?看我用Expect实现无人值守批量修改

使用该脚本现在要在脚本同级目录创建一个名为

hosts.list

文件,内容如下:

192.168.31.101
192.168.31.102
192.168.31.103

先为脚本赋予执行的权限,执行如下命令

chmod +x batch_password_change.exp

然后,修改脚本里的用户名、旧密码和新密码,如下:

....
set username "didiplus"
set old_password "password"
set new_password "password"

修改完之后,执行如下命令进行批量修改密码

./batch_password_change.exp 

执行完成后,会输出如下结果:

密码过期卡登录?看我用Expect实现无人值守批量修改

重点

对脚本感兴趣的小伙伴们可以关注公众号,私下回复脚本链接
即可获取。

推荐文章

微信公众号二维码

扫码关注公众号

关注我的博客

didiplus.kwpmp.cn