change password on a host list:
#!/usr/bin/expect -f
if {[llength $argv] == 0} {
puts "Usage: chpw \[/c] /u username /o old_password /n new_password host
1 host2 ..."
exit 1
}
set pwchallenge 0
while {[llength $argv] > 0} {
set flag [lindex $argv 0]
switch -- $flag \
"/u" {
set username [lindex $argv 1]
puts "Username: $username"
set argv [lrange $argv 2 end]
} "/o" {
set oldpasswd [lindex $argv 1]
puts "Old password: $oldpasswd"
set argv [lrange $argv 2 end]
} "/n" {
set newpasswd [lindex $argv 1]
puts "New password: $newpasswd"
set argv [lrange $argv 2 end]
} "/c" {
set pwchallenge 1
puts "Password challenge: $pwchallenge"
set argv [lrange $argv 1 end]
} default {
set hostlist [lrange $argv 0 end]
break
}
}
foreach host $hostlist {
puts "Hostname: $host"
# spawn ssh $username@$host passwd
spawn ssh $username@$host
expect "password: \r"
sleep 2s
send "$oldpasswd\r"
sleep 10s
expect "*\r"
sleep 2s
send "passwd\r"
expect "password: \r"
sleep 2s
send "$oldpasswd\r"
if {$pwchallenge} {
expect "*Enter choice here (q to quit): \r"
sleep 2s
# To pick your password (p)
send "p\r"
}
expect "password: \r"
sleep 2s
send "$newpasswd\r"
expect "password: \r"
sleep 2s
send "$newpasswd\r"
expect eof
}
|