+ Responder ao Tópico



  1. #1

    Padrão ajuda com expect na ateração de senha

    pessoal estou com um scirpt para alterção automata de senhas... ele entre em um looping loko e sai sem alterar a senha segue o script abaixo:


    Código :
     
     
    #!/usr/bin/expect
     
    if { $argc != 3 } {
        puts "Usage:"
        puts "$argv0 username oldpwd newpwd"
        exit
    }
     
    #set machine  [lindex $argv 0]
    set username [lindex $argv 0]
    set oldpwd   [lindex $argv 1]
    set newpwd   [lindex $argv 2]
    set completed_list " "
     
    #-----------------------------------------
    # Todas as maquinas sao setadas senhas em:
    #-----------------------------------------
    set machine_list {
    machine1
    machine2
    machine3
    etc
    etc
    }
     
     
    #----------------------------------------------------
    # Ping maquinas para ver qua delas esta ativa
    #   Direciona para run_list
    #----------------------------------------------------
    foreach machine $machine_list {
        if { [ catch { exec ping -c 1 $machine  } ] == 0 } {
            lappend run_list $machine
        }
    }
     
     
    proc exclude_list {} {
        set count 0
        global machine_list run_list
        foreach machine $machine_list {
            incr count
            if { [ lsearch $run_list $machine ] < 0 } {
                puts "\t$count)\t$machine"
            }
        }    
        puts ""
    }
     
    proc include_list {} {
        puts "Agora vai tentar alterar a senha nas seguintes maquinas:"
        set count 0
        global machine_list run_list
        foreach machine $run_list {
            incr count
                puts "\t$count)\t$machine"
        }
        puts ""
    }
     
    proc continue_chk {} {
        global run_list
        while {1} {
            include_list
            puts -nonewline "\nVoce gostaria de continuar ou modificar lista?(y/n/m): "
            gets stdin ans
            if { 1 == [regexp {^y|Y$} $ans]  } {
                puts "yes"
                break
            } elseif { 1 == [regexp {^m|M$} $ans]  } {
                puts -nonewline "\n Entre numero para remover: "
                gets stdin ans
                set r_num [expr {$ans - 1}]
                puts $run_list
                set run_list [ lreplace $run_list $r_num $r_num ]
            } else {
                puts "no"
                exit
            }
        }
    }
     
    puts "Falha ao pingar as seguintes maquinas:"
    exclude_list
     
    #puts "Agora vai tentar mudar a senha nas seguintes maquinas:"
    #include_list
     
    continue_chk
     
    foreach machine $run_list {
        set change 0
        spawn telnet $machine
        while {1} {
            expect  {
                timeout         break
                "\rlogin:"        { sleep 1
                                  send "${username}\r" }
                "New password"  { send "${newpwd}\r"
                                  lappend completed_list $machine
                                  set change 1 }
                "new password"  { send "${newpwd}\r"
                                 set change 1 }
                "Old password:" { send "${oldpwd}\r" }
                "Password:"     { send "${oldpwd}\r" }
                "\\\$"            { if {$change == 0} {
                                      send "passwd\r"
                                      set change 1
                                  } else {
                                      send "exit\r" }
                                }
                "changed"       { send "exit\r" }
                "closed"        { break }
            }
            sleep 1
        }
    }
     
    puts " "
    puts "Senha alterada com sucesso nas seguintes maquinas:"
    foreach machine $completed_list {
        puts $machine
    }
     
    puts " "
    puts "Senha nao foi alterada nas seguintes maquinas:"
    foreach machine $machine_list {
        if { [ lsearch $completed_list $machine ] < 0 } {
            puts $machine
        }
    }
    exit
    Alguem consegue ai?
    Última edição por B1SH0P; 31-01-2010 às 12:34. Razão: code incompleto