正文
Shell修改密码为原密码
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
密码到期后更改密码为原密码,服务器多时工作量巨大,编写脚本完成。
登陆后修改提示符为: doraemon# 方便expect匹配
修改LANG=C,提示为英文防止干扰:
#!/usr/bin/expect###############################################################
# 连接远程主机
proc do_login {passwd} {
set timeout
set done
set timeout_case
set ps1 {PS1="doraemon#";export PS1}
while {$done<} {
expect {
*assword* {
send $passwd\r
incr done
}
\[$%>#] {
set done
send $ps1\r\r
break
}
timeout {
set done
switch -- $timeout_case {
{ send_user "try again ...\n" }
{ exit
expect eof
}
}
incr timeout_case
}
}
}
if {$done==} {
exit
expect eof
}
}
###############################################################
# 执行命令
proc exec_cmd {cmd} {
expect -re "doraemon#$"
send_user "\$cmd: $cmd\n"
send $cmd\r
}
###############################################################
# 退出
proc logout {} {
expect -re "doraemon#$"
send exit\r
expect eof
}
###############################################################
# 执行命令
proc change_pass {curr cmd} {
expect {
-re "current|existing|exist|old|Old"
{
send $curr\r
exp_continue
}
-re "New|new"
{
send $cmd\r
exp_continue
}
-re "successfully|uthentication|changed"
{
send \r
}
}
}
###############################################################
if {$argc < } {
send_user "Usage:$argv0 user pass ip newpass\n"
exit
}
set user [lindex $argv ]
set pass [lindex $argv ]
set ip [lindex $argv ]
set new [lindex $argv ]
set pass_1 {1pqz!PAZ}
set pass_2 {2wyx@WYX}
set pass_3 {3hwd#HWC}
set pass_4 {4zxv$ZXV}
set pass_5 {5nmb%NMB}
spawn ssh -o StrictHostKeyChecking=no -l $user $ip
do_login $pass
exec_cmd "LANG=C;export LANG"exec_cmd passwd
change_pass $pass $pass_1
exec_cmd passwd
change_pass $pass_1 $pass_2
exec_cmd passwd
change_pass $pass_2 $pass_3
exec_cmd passwd
change_pass $pass_3 $pass_4
exec_cmd passwd
change_pass $pass_4 $pass_5
exec_cmd passwd
change_pass $pass_5 $newlogout
测试如下:
[root@centos1 shcript]# ./change_passwd.expect
Usage:./change_passwd.expect user pass ip newpass
[root@centos1 shcript]# ./change_passwd.expect root root123 127.0.0.1 root123
spawn ssh -o StrictHostKeyChecking=no -l root 127.0.0.1
root@127.0.0.1's password:
Last login: Fri Aug :: from 127.0.0.1
[root@centos1 ~]# PS1="doraemon#";export PS1
doraemon#
doraemon#$cmd: LANG=C;export LANG
LANG=C;export LANG
doraemon#$cmd: passwd
passwd
Changing password for user root.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
doraemon#$cmd: passwddoraemon#passwd
Changing password for user root.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
doraemon#$cmd: passwd
......