Expect + telnet problem

Arthur Meeks Meeks arthur.meeks.luppu at gmail.com
Thu Sep 10 18:23:43 UTC 2009


2009/9/10 Matthew Hall <lists at ecsc.co.uk>

> On 09/09/09 17:09, Arthur Meeks Meeks wrote:
> > Hello,
> >
> > I'm creating an expect script to:
> >
> > telnet router
> > execute command
> > exit
> >
> > This seems to be quite easy when you have 1 router, the problem is I
> > have a list of 40 routers, so I thought about creating a expect script
> > but I have gotten some problems.
> > The first one is...how to include all the machines?
> > I thought about something like: for d in $(cat router_list); do
> > expect_script $d;done
> >
> > And if that worked, the script would take $d and do:
> >
> > telnet $d
> > execute my command
> > exit
> >
> > But I don't know how to accomplish that as the script and the "expect
> > --exact" output are different, one per router, basically because:
> > expect -exact "telnet router23\r
> > Trying 192.168.33.12...\r
> > Connected to router23.test.\r
> >
> > Changes in all the routers, I have tried to delete that whole paragraph
> > so it only expects "Login", but it doesn't work.
> >
> > And also...how to include the script in the "for" loop?.
> >
> > Any idea will be appreciated.
>
>
> Try something like this:
>
> cat <<EOF >> telnet.exp
> #!/usr/bin/expectk -f
>
> spawn telnet $argv
> expect "Username:"
> exp_send "myusername\r"
> expect "Password:"
> exp_send "mypassword\r"
> expect -re "(.*)#"
> exp_send "sh run\r"
> sleep 0.1
> exp_send " "
> sleep 0.1
> exp_send " "
> expect -re "(.*)#"
> exp_send "exit\r"
> exit
> EOF
>
> for hostname in `cat list-of-routers`;do expect telnet.exp $hostname|tee
> $hostname.log;done


Matt, thanks a lot, this did the trick.

Thank you all guys for all your ideas, you all rock.

A
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.fedoraproject.org/pipermail/users/attachments/20090910/2eea5aae/attachment-0001.html 


More information about the users mailing list