The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Net::Appliance::Session::Cookbook::Recipe05 - Getting In To Enable Mode

NOTE

This Cookbook was contributed to the Net::Appliance::Session project by Nigel Bowden. Source code from the Cookbook is shipped in the examples folder of this module's distribution.

PROBLEM

You want to login to a Cisco device and get in enable mode to perform some pivilege level 15 commands.

SOLUTION

Depending on the configuration of your Cisco device, there are a number of possible combinations that need to be catered for in terms of password/username combinations. Here is a table of (hopefully) the most common combinations that will be encountered when trying to Telnet/SSH to a Cisco device :

 #  Case                                 Prompts             Commands

 1  Simple password-only login dropped   Password: secret    $session_obj->connect(Password=> 'secret');
    straight in to priv 15               router#             $session_obj->do_privileged_mode(0);
    
 2  Username and password straight in    Username: nigel     $session_obj->connect(Name => 'nigel', Password=> 'secret');
    to priv 15                           Password: secret    $session_obj->do_privileged_mode(0);
 
 3  Password for login to priv level 1   Password: secret    $session_obj->connect(Password=> 'secret'); 
    followed by password for priv 15     router> enable      $session_obj->begin_privileged( 'cisco' );
                                         Password: cisco
                                         router#
 
 4  Username and password for priv       Username: nigel     $session_obj->connect(Name => 'nigel', Password=> 'secret');
    level 1, followed by pwd for priv    Password: secret    $session_obj->begin_privileged( 'cisco' );
    level 15                             router> enable
                                         Password: cisco
                                         router#
 
 5  Username and password for priv       Username: nigel     $session_obj->connect(Name => 'nigel', Password=> 'secret');
    level 1, followed by same user       Password: secret    $session_obj->begin_privileged();
    name & pwd for enable                router> enable
                                         Username: nigel
                                         Password: secret
                                         router#
                                            
 6  Username and password for priv       Username: nigel     $session_obj->connect(Name => 'nigel', Password=> 'secret');
    level 1, followed by different       Password: secret    $session_obj->begin_privileged( 'foo', 'bar');
    username & pwd for enable            router> enable
                                         Username: foo
                                         Password: bar
                                         router#

DISCUSSION

The table above is (hopefully) largely self explantory and should serve as a useful lookup to adapt scripts to your particular environment.

However one point that needs some explanation potentially is the $session_obj->do_privileged_mode(0) statement. This is used in the scenarios where the user is dropped straight in to enable mode (priv 15) upon logging in.

Net::Appliance::Session does some internal checking to see if you are already in enable mode before it will let you enter configure mode (using conf t in IOS). Unless you use the $session_obj->do_privileged_mode(0) statement to tell Net::Appliance::Session that we are already in enable mode (priv 15), it will raise an error when we try to go in to configure mode (using the $session_obj->begin_configure(), which we haven't covered yet). So, it's best to let Net::Appliance::Session know we are in enable mode once we have logged in.

Finally, remember that unless you use the error handling recommended in the last recipe, your scripts will fail at the point that any unexpected reposnses are received during the login process.

SEE ALSO

Net::Appliance::Session

AUTHOR

Nigel Bowden, with POD formatting by Oliver Gorwits.

COPYRIGHT & LICENSE

Copyright (c) Nigel Bowden 2007. All Rights Reserved.

You may distribute and/or modify this documentation under the same terms as Perl itself.