Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 30 Jan 2005 22:23:00 -0600
From:      Jay Moore <jaymo@cromagnon.cullmail.com>
To:        Timothy Luoma <lists@tntluoma.com>
Cc:        FreeBSD Mailing List <freebsd-questions@freebsd.org>
Subject:   Re: running interactive program from shell script
Message-ID:  <200501302223.00779.jaymo@cromagnon.cullmail.com>
In-Reply-To: <dce54c84eb6186457fcbe553b3491393@tntluoma.com>
References:  <200501300533.51350.jaymo@cromagnon.cullmail.com> <dce54c84eb6186457fcbe553b3491393@tntluoma.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sunday 30 January 2005 05:11 pm, Timothy Luoma wrote:

> > I need a shell script that initiates a telnet session to another host.
> >
> > I have come up with the following, but unfortunately it terminates
> > when the script
> > is finished. What I wanted was for the telnet session to remain
> > "alive" and
> > interactive until manually terminated.
> >
> > Is there a way to accomplish this in a shell script?
>
> Well, you'll have to give a little more information about what you're
> trying to do, because "initiating a telnet session" to me means
> "starting telnet" but it looks (if I am correctly interpreting/guessing
> what you are trying to do below) like you are trying to create a shell
> script which will start a telnet session AND automatically log you in.

Precisely...

> > I've been told that I'll have to use "expect" or similar to accomplish
> > this,
> > but it seems to me that I should be able to do this using just Bourne
> > shell
> > commands.
>
> Yes, if you want to automatically log yourself in via telnet, then you
> will need expect.  There's no way to do this via /bin/sh

A-a-a-r-r-r-g-h-h.  You are correct! But what I still don't understand is why 
I can start and maintain a telnet session from a shell script, but if I add a 
couple of lines to send the password the damn thing terminates. In other 
words:

#! /bin/sh
telnet -l user 192.168.0.2

will start an "interactive" telnet session which will run until I enter 
'exit'. 

BUT - if I embellish it just a bit (as in the script below) to echo the 
password and ls -la the remote directory it exits as soon as the script 
finishes. 

As the bank robber in 'Dirty Harry' said, "I gots to know."

As for what I'm trying to do:
I have a requirement to administer a number of remotely located embedded 
devices; these devices do not support ssh - only telnet. To avoid the obvious 
security issues, I am going to co-locate a "real" computer at each remote 
location. I will ssh into the "real" computer, and then telnet over a local 
network to the embedded device(s). I realize there are many ways of 
accomplishing this, but I'm kind of hung up on doing it "my way"  :)

>
> > #! /bin/sh
> >
> >     (sleep 3;
> >     echo "password";
> >     sleep 3;
> >     echo "ls -la";
> >     sleep 3;
> >     ) | telnet -l user 192.168.0.2
>
> Ok, so this says: "Wait 3 seconds, echo 'password' to stdout, wait 3
> seconds, then show the output of 'ls -la' then wait 3 seconds and then
> send the output to telnet [which will, as far as I know, completely
> ignore everything you send to it] and then telnet to 192.168.0.2 as
> user 'user'

No - not exactly. You have the sequence correct, but the results are that the 
password is sent to the remote telnet host, it does log me in, it performs 
the ls -la (displaying the result on my local console), and then exits! 

Puzzledly,
Jay



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200501302223.00779.jaymo>