229 lines
8.7 KiB
HTML
229 lines
8.7 KiB
HTML
<!--startcut ======================================================= -->
|
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
|
|
<html>
|
|
<head>
|
|
<META NAME="generator" CONTENT="lgazmail v1.3B.f">
|
|
<TITLE>The Answer Guy 50: Automated Login Around a Challenge Card</TITLE>
|
|
</HEAD><BODY BGCOLOR="#FFFFFF" TEXT="#000000"
|
|
LINK="#3366FF" VLINK="#A000A0">
|
|
<!-- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
|
|
<H4>"The Linux Gazette...<I>making Linux just a little more fun!</I>"</H4>
|
|
<P> <hr> <P>
|
|
<!-- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
|
|
<center>
|
|
<H1><A NAME="answer">
|
|
<img src="../../gx/dennis/qbubble.gif" alt="(?)"
|
|
border="0" align="middle">
|
|
<font color="#B03060">The Answer Guy</font>
|
|
<img src="../../gx/dennis/bbubble.gif" alt="(!)"
|
|
border="0" align="middle">
|
|
</A></H1>
|
|
<BR>
|
|
<H4>By James T. Dennis,
|
|
<a href="mailto:linux-questions-only@ssc.com">linux-questions-only@ssc.com</a><BR>
|
|
LinuxCare,
|
|
<A HREF="http://www.linuxcare.com/">http://www.linuxcare.com/</A>
|
|
</H4>
|
|
</center>
|
|
|
|
<p><hr><p>
|
|
<!-- endcut ======================================================= -->
|
|
<!-- begin 44 -->
|
|
<H3 align="left"><img src="../../gx/dennis/qbubble.gif"
|
|
height="50" width="60" alt="(?) " border="0"
|
|
>Automated Login Around a Challenge Card</H3>
|
|
|
|
|
|
<p><strong>From Wayne Xin on Thu, 20 Jan 2000
|
|
</strong></p>
|
|
<!-- ::
|
|
Automated Login Around a Challenge Card
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
:: -->
|
|
<P><STRONG>
|
|
Sorry for the bold disturbance. I've been frustrated with this problem.
|
|
Hope you can point me to the right solution.
|
|
</STRONG></P>
|
|
<P><STRONG>
|
|
I have a battery based security card that changes my password for ISP
|
|
connection every minute. So I can't totally automate my login process
|
|
with a fixed password. Is there a place that talks about pausing in the
|
|
middle of a script for me to type in the password and then continuing to
|
|
capture the remotely assigned IP?
|
|
</STRONG></P>
|
|
<P><STRONG>
|
|
Appreciate your help.
|
|
<br>PS: I am talking linux 6.1 (X86) modem/ISP configuration
|
|
<IMG SRC="../../gx/dennis/smily.gif" ALT=":)"
|
|
height="24" width="20" align="middle">
|
|
</STRONG></P>
|
|
<BLOCKQUOTE><IMG SRC="../../gx/dennis/bbub.gif" ALT="(!)"
|
|
HEIGHT="28" WIDTH="50" BORDER="0"
|
|
>
|
|
In the 'expect' scripting language you can
|
|
use an '<tt>interact</tt>' function with one or more "escape
|
|
patterns."
|
|
</BLOCKQUOTE>
|
|
<BLOCKQUOTE>
|
|
Here's an example:
|
|
</BLOCKQUOTE>
|
|
|
|
<blockquote><pre>#!/usr/bin/expect -f
|
|
|
|
spawn telnet "somehost"
|
|
expect "login:"
|
|
send "myname\r"
|
|
expect "enter key from your card:"
|
|
interact "\r" {
|
|
return
|
|
}
|
|
expect "success"
|
|
## continue with script
|
|
interact
|
|
</pre></blockquote>
|
|
<BLOCKQUOTE>
|
|
In this case we open a telnet to "somehost" and we
|
|
automate part of the login (waiting for a login:
|
|
prompt, sending a name, waiting for a sort of
|
|
password for your card).
|
|
</BLOCKQUOTE>
|
|
<BLOCKQUOTE>
|
|
The interesting part of this is where we have the
|
|
'interact' directive. In this case we interact
|
|
until an [Enter] key is entered and when we see that
|
|
escape sequence we execute some 'expect' code (in this
|
|
case all we're doing is executing the 'return' from
|
|
the interact to the rest of our script).
|
|
</BLOCKQUOTE>
|
|
<BLOCKQUOTE>
|
|
It's possible in 'expect' to have multiple "escape
|
|
sequences" or "macros" as options to the the '<tt>interact</tt>'
|
|
function. Each of these can have its own block of
|
|
'expect' code. These other bits of code can '<tt>spawn</tt>'
|
|
other programs that have their own nested '<tt>interact</tt>'
|
|
functions, etc.
|
|
</BLOCKQUOTE>
|
|
<BLOCKQUOTE>
|
|
Obviously (as I've shown) you can also have multiple
|
|
'<tt>interact</tt>' sessions in a script. (It should also be
|
|
obvious that you'll only get to the second and subsequent
|
|
sessions by using a '<tt>return</tt>' from each of the
|
|
preliminary '<tt>interact</tt>' invocations.
|
|
</BLOCKQUOTE>
|
|
<BLOCKQUOTE>
|
|
Most 'expect' syntax is derived from the TCL libraries
|
|
around which it is build. TCL is a language that was
|
|
designed to be embedded into other applications and
|
|
utilities and 'expect' is a utility which lets you
|
|
run interactive programs, connected to psuedo-terminals
|
|
and control them through its '<tt>expect</tt>', '<tt>send</tt>',
|
|
and related functions. The rest of the language is
|
|
TCL.
|
|
</BLOCKQUOTE>
|
|
<BLOCKQUOTE>
|
|
Anyway that's the easiest way that I know of to
|
|
do this under Linux. There's also an <tt>Expect.pm</tt>
|
|
PERL module. I haven't used it, but it should have
|
|
most of the same features.
|
|
</BLOCKQUOTE>
|
|
|
|
<!-- sig -->
|
|
<!-- end 44 -->
|
|
<!--startcut ======================================================= -->
|
|
<P> <hr> <P>
|
|
<H5 align="center"><a href="http://www.linuxgazette.com/copying.html"
|
|
>Copyright ©</a> 2000, James T. Dennis
|
|
<BR>Published in <I>The Linux Gazette</I> Issue 50 February 2000</H5>
|
|
<H6 ALIGN="center">HTML transformation by
|
|
<A HREF="mailto:star@starshine.org">Heather Stern</a> of
|
|
Starshine Technical Services,
|
|
<A HREF="http://www.starshine.org/">http://www.starshine.org/</A>
|
|
</H6>
|
|
<P> <hr> <P>
|
|
<!-- begin tagnav ::::::::::::::::::::::::::::::::::::::::::::::::::-->
|
|
<TABLE WIDTH="95%"><TR VALIGN="center" ALIGN="center">
|
|
<TD colspan="2" rowspan="2"><A
|
|
HREF="../lg_answer50.html"
|
|
><IMG SRC="../../gx/dennis/answernew.gif"
|
|
ALT="[ Answer Guy Current Index ]"></A>
|
|
<TD colspan="2" rowspan="2"><A
|
|
HREF="../../tag/kb.html"
|
|
><IMG SRC="../../gx/dennis/answertoc.gif"
|
|
ALT="[ Index of Past Answers ]"></A></td>
|
|
<TD WIDTH="11%"><A HREF="../lg_answer50.html#greeting"><img
|
|
src="../../gx/dennis/smily.gif" alt="greetings" border="0"></A></TD>
|
|
<TD WIDTH="11%"><A HREF="1.html">1</A></TD>
|
|
<TD WIDTH="11%"><A HREF="2.html">2</A></TD>
|
|
<TD WIDTH="11%"><A HREF="3.html">3</A></TD>
|
|
<TD WIDTH="11%"><A HREF="4.html">5</A></TD>
|
|
</TR><TR VALIGN="center" ALIGN="center">
|
|
<TD WIDTH="11%"><A HREF="5.html">5</A></TD>
|
|
<TD WIDTH="11%"><A HREF="6.html">6</A></TD>
|
|
<TD WIDTH="11%"><A HREF="7.html">7</A></TD>
|
|
<TD WIDTH="11%"><A HREF="8.html">8</A></TD>
|
|
<TD WIDTH="11%"><A HREF="9.html">9</A></TD>
|
|
</TR><TR VALIGN="center" ALIGN="center">
|
|
<TD WIDTH="10%"><A HREF="10.html">10</A></TD>
|
|
<TD WIDTH="10%"><A HREF="11.html">11</A></TD>
|
|
<TD WIDTH="10%"> </TD>
|
|
<TD WIDTH="10%"><A HREF="13.html">13</A></TD>
|
|
<TD WIDTH="11%"><A HREF="14.html">14</A></TD>
|
|
<TD WIDTH="11%"><A HREF="15.html">15</A></TD>
|
|
<TD WIDTH="11%"><A HREF="16.html">16</A></TD>
|
|
<TD WIDTH="11%"><A HREF="17.html">17</A></TD>
|
|
</TR><TR VALIGN="center" ALIGN="center">
|
|
<TD WIDTH="10%"><A HREF="18.html">18</A></TD>
|
|
<TD WIDTH="10%"><A HREF="19.html">19</A></TD>
|
|
<TD WIDTH="10%"><A HREF="20.html">20</A></TD>
|
|
<TD WIDTH="10%"><A HREF="21.html">21</A></TD>
|
|
<TD WIDTH="11%"><A HREF="22.html">22</A></TD>
|
|
<TD WIDTH="11%"><A HREF="23.html">23</A></TD>
|
|
<TD WIDTH="11%"><A HREF="24.html">24</A></TD>
|
|
<TD WIDTH="11%"> </TD>
|
|
</TR><TR VALIGN="center" ALIGN="center">
|
|
<TD WIDTH="10%"><A HREF="26.html">26</A></TD>
|
|
<TD WIDTH="10%"><A HREF="27.html">27</A></TD>
|
|
<TD WIDTH="10%"><A HREF="28.html">28</A></TD>
|
|
<TD WIDTH="10%"><A HREF="29.html">29</A></TD>
|
|
<TD WIDTH="11%"><A HREF="30.html">30</A></TD>
|
|
<TD WIDTH="11%"><A HREF="31.html">31</A></TD>
|
|
<TD WIDTH="11%"><A HREF="32.html">32</A></TD>
|
|
<TD WIDTH="11%"><A HREF="33.html">33</A></TD>
|
|
</TR><TR VALIGN="center" ALIGN="center">
|
|
<TD WIDTH="10%"><A HREF="34.html">34</A></TD>
|
|
<TD WIDTH="10%"> </TD>
|
|
<TD WIDTH="10%"><A HREF="36.html">36</A></TD>
|
|
<TD WIDTH="10%"><A HREF="37.html">37</A></TD>
|
|
<TD WIDTH="11%"><A HREF="38.html">38</A></TD>
|
|
<TD WIDTH="11%"><A HREF="39.html">39</A></TD>
|
|
<TD WIDTH="11%"><A HREF="40.html">42</A></TD>
|
|
<TD WIDTH="11%"><A HREF="41.html">41</A></TD>
|
|
</TR><TR VALIGN="center" ALIGN="center">
|
|
<TD WIDTH="10%"><A HREF="42.html">42</A></TD>
|
|
<TD WIDTH="10%"><A HREF="43.html">43</A></TD>
|
|
<TD WIDTH="10%"><A HREF="44.html">44</A></TD>
|
|
<TD WIDTH="10%"><A HREF="45.html">45</A></TD>
|
|
<TD WIDTH="11%"><A HREF="46.html">46</A></TD>
|
|
<TD WIDTH="11%"><A HREF="47.html">47</A></TD>
|
|
<TD WIDTH="11%"><A HREF="48.html">48</A></TD>
|
|
</TR></TABLE>
|
|
</TR><TR VALIGN="center" ALIGN="center">
|
|
<!-- end tagnav ::::::::::::::::::::::::::::::::::::::::::::::::::::-->
|
|
<P> <hr> <P>
|
|
<!-- begin lgnav ::::::::::::::::::::::::::::::::::::::::::::::::::: -->
|
|
<A HREF="../index.html"
|
|
><IMG SRC="../../gx/indexnew.gif" ALT="[ Table Of Contents ]"></A>
|
|
<A HREF="../../index.html"
|
|
><IMG SRC="../../gx/homenew.gif" ALT="[ Front Page ]"></A>
|
|
<A HREF="../lg_bytes50.html"
|
|
><IMG SRC="../../gx/back2.gif" ALT="[ Previous Section ]"></A>
|
|
<A HREF="../../faq/index.html"
|
|
><IMG SRC="../../gx/dennis/faq.gif"
|
|
ALT="[ Linux Gazette FAQ ]"></A>
|
|
<A HREF="../lg_tips50.html"
|
|
><IMG SRC="../../gx/fwd.gif" ALT="[ Next Section ]"></A>
|
|
<!-- end lgnav ::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
|
|
<!-- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
|
|
</BODY></HTML>
|
|
<!--endcut ========================================================= -->
|