#!/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