#! /bin/expect
set timeout 20
set user [lindex $argv 0]
set password [lindex $argv 1]
set prompt "$ " ;# -- main activity
proc dostuff { currenthost} {
;# do something with currenthost
send -- "ls -lrtr" return} ;# -- start of task
set fd [open ./hostlist r]
set hosts [read -nonewline $fd]
close $fd
foreach host [split $hosts "n" ] {
spawn /usr/bin/ssh $user@$host
while (1) {
expect {
"no)? " {
send -- "yesr"
}
"password: " {
send -- "$passwordr"
}
"$prompt" {
dostuff { $host }
break
}
}
}
expect "$prompt"
send -- "exitr"
}
expect eof
I looked through this code online but will it read data if it is arragnged in 2 columns like.
HOST TFTP_SERVER_ADDRESS xx XXYY aa AABB ... ... ... ....
and so on
I would like to assign each TFTP_SERVER_ADDRESS to a variable and use it in my script.
furthermore,Is this piece of code secure :
# grab the password stty -echo send_user -- "Password for $user@$host: " expect_user -re "(.*)n" send_user "n" stty echo set pass $expect_out(1,string) #... later send -- "$passr"
Advertisement
Answer
Sample Script that reads data from a file and then calls an expect script.
ChangePassword.sh
while read line
do
pin=`echo $line | awk -F'|' '{print $1}'`
ipaddress=`echo $line | awk -F'|' '{print $2}'`
password=`echo $line | awk -F'|' '{print $3}'`
#echo "$pin -- $password -- $ipaddress"
echo "./t.expect $ipaddress $pin "$password" "
done<pin_password_8_192series.csv
t.expect
#!/usr/bin/expect -f set timeout 20 set IPaddress [lindex $argv 0] set PIN [lindex $argv 1] set PASSWORD [lindex $argv 2] spawn telnet $IPaddress expect "localhost login:" send "rootr" expect "Password:" send "rootr" send "cd /mnt/sipr" send "sed -i 's/Password="$PIN"/Password="$PASSWORD"/g' Config.xmlr" send "rebootr" send "exitr" interact
pin_password_8_192series.csv
341|192.168.6.1|&<M11qqHVkDdBj2 342|192.168.6.3|gyo8rB-9C<Ok.;= 343|192.168.6.6|skFI)4S-O.&-y,i 344|192.168.6.8|+Fqp6z*qEtQN0s?