I'm trying to write my first expect script which will push new language to a remote file.
This is what I have so far that isn't really working:
#!/usr/bin/expect
set fid1 [open ./hosts.list r]
set hosts [read -nonewline $fid1]
close $fid1
set banner_cmd "cat > /tmp/new_sshd_banner << EOF
<New Language Goes Here>
EOF"
send "\n"
stty -echo
send_user "Enter password for remote sudo: "
expect_user -re "(.*)\n"
stty echo
set pass $expect_out(1,string)
send "\n"
foreach host [split $hosts "\n"] {
eval spawn "/usr/bin/ssh $host"
expect {
-re "RSA key fingerprint" {send "yes\r"}
timeout {puts "Host is known"}
}
expect "$host"
send "sudo mv /etc/file /etc/file.orig"
expect "assword"
send $pass
expect "$host"
send "sudo $file_cmd"
expect "$host"
send "sudo mv /tmp/file /etc/file
}
When it runs, this is what I see:
opensuse @ 15:10 ~/bin> ./fix_file.exp
Enter password for remote sudo:
spawn /usr/bin/ssh server
<New Language Goes Here>
Last login: Fri Aug 31 19:52:45 2012 from 10.152.81.105
[user@server ~]$ Host is known
sudo cat > /tmp/new_file << EOF
>
>
> <New Language Goes Here>
>
> EOFsudo mv /etc/file /etc/filePASSWORD*missing "
while executing
"send "sudo mv /tmp/file /etc/file
"
("foreach" body line 17)
invoked from within
"foreach host [split $hosts "\n"] {
eval spawn "/usr/bin/ssh $host"
expect {
-re "RSA key fingerprint" {send "yes\r"}
timeout {puts "Host i..."
(file "./fix_file.exp" line 45)
One thing that isn't readily apparent is that it tacks the password obtained from the user into the output of the mv command.
Where have I gone wrong with this?