Hi All:
I'm trying to synchronize an Oracle database on one
computer from a Mysql database on the computer
barracuda by using Expect. Mysql has a nifty logging
feature which places all insert, update, delete, and other
altering commands into a file. My goal is to have
the "one" computer's crontab log into barracuda;
then barracuda will kick off a process which simply
"cat"s the Mysql log files. The "one" computer will
then capture those SQL statements and send them to sqlplus.
The challenge is for the "one" computer to send the
password to barracuda because barracuda (or any *nix computer)
accepts passwords only from a tty. OK, so here's
where Expect shines. Expect is a "see and say" programming
language which knows how to pump strings to a tty.
(It's called "see and say" because when it sees
"Password:", it can be programmed to say "thepassword".)
Well, Expect works find when the process is kicked off
from the command line; however, it fails to work when
executed from crontab.
Here is the Expect script:
#!/usr/bin/expect --
exp_internal 1
spawn ssh -l mysql_sync barracuda
expect [EMAIL PROTECTED] password:
send thepassword\r
interact
Here is the output when the Expect script
successfully executes from the command line:
spawn ssh -l mysql_sync barracuda
parent: waiting for sync byte
parent: telling child to go ahead
parent: now unsynchronized from child
spawn: returns {26147}
expect: does "" (spawn_id exp4) match glob pattern "[EMAIL PROTECTED]'s
password: "? no
[EMAIL PROTECTED]'s password:
expect: does "[EMAIL PROTECTED]'s password: " (spawn_id exp4) match glob
pattern "[EMAIL PROTECTED]'s password: "? yes
expect: set expect_out(0,string) "[EMAIL PROTECTED]'s password: "
expect: set expect_out(spawn_id) "exp4"
expect: set expect_out(buffer) "[EMAIL PROTECTED]'s password: "
send: sending "thepassword\r" to { exp4 }
tty_raw_noecho: was raw = 0 echo = 1
spawn id exp4 sent <\r\n>
Warning: No xauth data; using fake authentication data for X11 forwarding.
spawn id exp4 sent < \r\n\r\n
*SYSTEM INFO *
Hostname : barracuda
spawn id exp4 sent
Connection to barracuda closed.
interact: received eof from spawn_id exp4
tty_set: raw = 0, echo = 1
tty_set: raw = 3, echo = 0
Here is the output when the Expect script
fails to execute from crontab:
spawn ssh -l mysql_sync barracuda
parent: waiting for sync byte
parent: telling child to go ahead
parent: now unsynchronized from child
spawn: returns {26242}
expect: does "" (spawn_id exp3) match glob pattern "[EMAIL PROTECTED]'s
password: "? no
[EMAIL PROTECTED]'s password:
expect: does "[EMAIL PROTECTED]'s password: " (spawn_id exp3) match glob
pattern "[EMAIL PROTECTED]'s password: "? yes
expect: set expect_out(0,string) "[EMAIL PROTECTED]'s password: "
expect: set expect_out(spawn_id) "exp3"
expect: set expect_out(buffer) "[EMAIL PROTECTED]'s password: "
send: sending "thepassword\r" to { exp3 }
spawn id exp0 sent <\nexit 0\n\n>
interact: received eof from spawn_id exp0
Notice that whereas it seems to send the password,
there is no evidence that barracudas computer
was logged into.
How do you have a crontab executed process using Expect
pump a password to another computer?
--
Tim Riley
___
vox-tech mailing list
vox-tech@lists.lugod.org
http://lists.lugod.org/mailman/listinfo/vox-tech