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

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

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

那么,遇到这种情况时,我们该如何进行批量处理呢?有一种工具叫做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 eof1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.

关键命令详解:

spawn:启动新的交互进程expect:等待特定模式出现send:向进程发送字符串interact:将控制权交还给用户exp_continue:继续匹配后续模式set timeout:设置等待超时时间实战案例

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

使用该脚本现在要在脚本同级目录创建一个名为hosts.list文件,内容如下:

复制
192.168.31.101 192.168.31.102 192.168.31.1031.2.3.

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

复制
chmod +x batch_password_change.exp1.

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

复制
.... set username "didiplus" set old_password "password" set new_password "password"1.2.3.4.

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

复制
./batch_password_change.exp1.

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

THE END
本站服务器由亿华云赞助提供-企业级高防云服务器