用expect 修改linux系统用户密码
#!/usr/bin/expect set OLDPWD [lindex $argv 0] set NEWPWD [lindex $argv 1] # spawn /usr/bin/echo $OLDPWD # spawn /usr/bin/echo $NEWPWD spawn /usr/bin/passwd expect "(current) UNIX password*" send "$OLDPWD\r" expect "Enter new UNIX password*" send "$NEWPWD\r" expect "Retype new UNIX password*" send "$NEWPWD\r" interact
系统用的是CentOS 7.5;
先安装expect
# yum install -y expect
# which expect
/usr/bin/expect
脚本执行方式:
模仿无root权限,重置用户自己的密码:
$ /usr/bin/expect tt.sh 原密码 新密码
在一台机器上运行脚本,通过记录IP,用户名,原密码,新密码的中间文件passwd.txt,来批量重置接管环境的密码,尤其是在某些没有root用户权限的情况下,通过中间文件的方式不会有重置了一个密码但是自己忘记了或者重置的密码与自己记录的密码不一致的情况。脚本待更新,大致是通过expect和awk实现的。
首先呢,我们需要生成一堆越复杂越好的密码。怎么用脚本生成呢。
参考:https://www.cnblogs.com/dadonggg/p/8477655.html
# 生成24位随机密码,urandom 真是特别好用,会比 # date +%s |sha256sum |base64 |head -c 10 ;echo 这个命令好用,因为如果用脚本的话,输入的时间参数相差无几,使用相同的加密方式会有大量相似的密码生成,实用性就不够了,除非再用一个特殊的方法获得随机字符作为输入。
# </dev/urandom tr -dc '1234567890abcdefghijklmnopqrstuvwsyzABCDEFGHIJKLMNOPQRSTUVWXYZ~!@#$%^&*()_+<>?,./' | head -c24; echo
脚本编写重定向到文件,然后用脚本再重新生成一个和 IP、用户名、原密码 一一对应的一个文件,便于记录修改后的密码,及记录资产台账。
批量重置的前提,需要重置密码的系统都需要先安装 expect。