Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery
 
PerlMonks  

Re: Net::Telnet on routers and switches

by quester (Vicar)
on Mar 06, 2007 at 06:51 UTC ( [id://603357]=note: print w/replies, xml ) Need Help??


in reply to Net::Telnet on routers and switches

This might seem a bit off topic in Perlmonks, but I find life with Cisco is much easier using an Expect script called clogin that is part of the Rancid package, from http://www.shrubbery.net/rancid/.

To use it, you need to install Expect; not Perl's Expect.pm, but the TCL-centric language Expect that was originally from http://expect.nist.gov/. Be sure to install Shrubbery's patched Expect; otherwise you are likely to experience processes that hang once in a blue moon for no obvious reason. It will use the built in telnet and/or ssh commands on your system.

Clogin's configuration file is manna from heaven if your devices are the typical motley mix of different generations of equipment: some accepting telnet only, some accepting ssh only, some wanting user name and password, some wanting just the enable password twice, and some that want to autoenable (you get the # enable prompt as soon as you are logged in.)

If you just need to issue a single command, or a canned string of commands from the command line,

    clogin -c "show clock; show version" cisco2500a

is sufficient, once you have set up a ~/.cloginrc file to specify the characteristics of your routers. You can of course use open $fh, "clogin ...|" to read the output with a Perl script.

If you have to look at the output of some of the commands in order to decide what the next command should be, I think that using Perl's Expect.pm to spawn clogin is far less painless painful than anything else I've seen. You just let clogin do the tedious grunt work of getting logged in and getting an enable prompt, so you can concentrate on the task at hand. (Update: fixed "less painful". Thanks, rodion!)

  • Comment on Re: Net::Telnet on routers and switches

Replies are listed 'Best First'.
Re^2: Net::Telnet on routers and switches
by quester (Vicar) on Mar 06, 2007 at 20:10 UTC
    This is an example of how Expect.pm and clogin can be used together:

    #! /usr/bin/perl -w use warnings; use diagnostics; use strict; use Expect qw(expect); use Carp; scalar @ARGV or croak "usage: $0 host1..."; my $session = Expect->spawn( 'clogin', $ARGV[0] ); if ( exists $ENV{'exp_internal'} ) { $session->exp_internal(1) } $session->log_stdout(1); sub expect_send { my $pattern = shift; my $command = shift; my $ret = $session->expect( 30, [ '-re', $pattern => sub { $_[0]->send("$command\n") } ], @_, [ timeout => sub { croak 'Timeout' } ], [ eof => sub { croak 'EOF (clogin exited unexpectedly)' } +], ); croak 'Nothing matched, not even timeout, died' if not defined $ret; return $ret; } expect_send qr/#/, 'show clock'; expect_send qr/#/, 'show logging'; $session->expect( 30, [ '-re', qr/Log Buffer \(\d+ bytes\)/i => sub { $session->match() =~ /\((\d+) bytes\)/i; print "\n\n* Found logging buffer size is $1 bytes *\n\n"; if ( $1 < 8192 ) { expect_send qr/#/, 'configure terminal'; expect_send qr/\(config\)#/i, 'logging buffered 8192'; expect_send qr/\(config\)#/i, 'end'; expect_send qr/#/, 'write memory'; } } ], ); expect_send qr/#/, 'exit'; $session->soft_close;

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://603357]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others taking refuge in the Monastery: (4)
As of 2024-04-24 05:29 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found