zoukankan      html  css  js  c++  java
  • Shell修改密码为原密码

      密码到期后更改密码为原密码,服务器多时工作量巨大,编写脚本完成。

      登陆后修改提示符为: doraemon# 方便expect匹配

      修改LANG=C,提示为英文防止干扰:

      

    #!/usr/bin/expect
    
    ###############################################################
    # 连接远程主机
    proc do_login {passwd} {
        set timeout 10
        set done 1
        set timeout_case 0
        set ps1 {PS1="doraemon#";export PS1}
        while {$done<3} {
            expect {
                *assword* {
                    send $passwd
                    incr done
                }
                [$%>#] {
                    set done 5
                    send $ps1
    
                    break
                }
                timeout {
                    set done 1
                    switch -- $timeout_case {
                        1 { send_user "try again ...
    " }
                        2 { exit 2
                            expect eof
                        }
                    }
                    incr timeout_case
                }
            }
        }
        if {$done==3} {
            exit 3
            expect eof
        }
    }
    ###############################################################
    # 执行命令
    proc exec_cmd {cmd} {
        expect -re "doraemon#$"
        send_user "$cmd: $cmd
    "
        send $cmd
    }
    ###############################################################
    # 退出
    proc logout {} {
        expect -re "doraemon#$"
        send exit
        expect eof
    }
    ###############################################################
    # 执行命令
    proc change_pass {curr cmd} {
        expect {
            -re "current|existing|exist|old|Old"
            { 
                send $curr
                exp_continue
            }
            -re "New|new"
            {
                send $cmd
                exp_continue
            }
            -re "successfully|uthentication|changed"
            {
                send 
            }
        }
    }
    ###############################################################
    if {$argc < 4} {
        send_user "Usage:$argv0 user pass ip newpass
    "
        exit 1
    }
    set user [lindex $argv 0]
    set pass [lindex $argv 1]
    set ip [lindex $argv 2]
    set new [lindex $argv 3]
    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 $new
        
    logout

       测试如下:

    [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 14 02:55:22 2015 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: passwd
    
    doraemon#passwd
    Changing password for user root.
    New password: 
    Retype new password: 
    passwd: all authentication tokens updated successfully.
    doraemon#$cmd: passwd
    ......

     

  • 相关阅读:
    命名对象继承2-验证Open*命名对象安全属性的传递
    命名对象继承1-验证Create*命名对象安全属性的传递
    讨论c/c++计算小数的精度问题
    隐藏进程名
    一个函数重载问题
    02-Python基础之列表
    01-Python基础之字符串
    django 实用工具dj-database-url 快速配置数据库
    Gerrit安装配置
    关于数学的摘抄
  • 原文地址:https://www.cnblogs.com/wbjxxzx/p/4545956.html
Copyright © 2011-2022 走看看