Cisco config backup Tool では、Catalyst の標準的な Telnet パスワードでログインする場合を前提に作成しています。
Catalyst ではスイッチ本体に登録するユーザ名・パスワードによる認証も可能で、コマンド "aaa new-model" により AAA (Authentication, Authorization, Accounting) が有効な場合にも適用するサンプルです。
$aaa には、AAA が有効なスイッチを追加します。他はユーザ名の追加と $aaa にマッチした場合の条件分岐が主な変更です。
#!/usr/bin/perl -w
#
# get.pl
#
#// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
#// use Module
#// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
use strict;
use Net::Telnet::Cisco;
#// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
#// Controller
#// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
my $target = $ARGV[0];
#// ----------------------------------------------------------
#// Item Set
#// ----------------------------------------------------------
my $user = 'user';
my $pass_vt = 'password0'; #// login
my $pass_en = 'password'; #// enable
my $list = {
'sw00' => '192.168.20.10',
'sw01' => '192.168.20.11',
'sw02' => '192.168.20.12',
};
my $aaa = {
'sw01' => 1,
};
#// ----------------------------------------------------------
#// Start
#// ----------------------------------------------------------
foreach (%$list) {
next unless ($list->{$_});
if ($target) {
next unless ($target eq $_);
}
my $addr = $list->{$_};
my $host = $_;
my $sess = Net::Telnet::Cisco->new(Host => $addr);
if ($aaa->{$_}) {
$sess->login(Name => $user, Password => $pass_vt);
} else {
$sess->login(Password => $pass_vt);
}
$sess->enable($pass_en);
my @cmd0 = $sess->cmd('show run');
my @cmd1 = $sess->cmd('show vlan');
my @cmd2 = $sess->cmd('show int status');
$sess->close;
#//
my $date = substr(utime2date(time()), 0, 10);
$date =~ s/\///g;
my $file0 = $host . '_' . $date . '.run';
my $file1 = $host . '_' . $date . '.vlan';
my $file2 = $host . '_' . $date . '.stat';
open WRITE, "+>$file0";
foreach my $cmd (@cmd0) {
next if ($cmd =~ /^Building/);
#next if ($cmd =~ /^\n$/);
next if ($cmd =~ /^Current/);
print WRITE $cmd;
}
close WRITE;
open WRITE, "+>$file1";
foreach my $cmd (@cmd1) {
print WRITE $cmd;
}
close WRITE;
open WRITE, "+>$file2";
foreach my $cmd (@cmd2) {
print WRITE $cmd;
}
close WRITE;
#//
print "Done: $host\n";
}
#// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
#// Model
#// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
sub utime2date {
my ($sec, $min, $hours, $mday, $mon, $year, $wday, $yday, $isdst) = localtime($_[0]);
my $years = $year + 1900;
my $this_mon = sprintf("%02d",$mon + 1);
$mday = sprintf("%02d", "$mday");
$hours = sprintf("%02d", "$hours");
$min = sprintf("%02d", "$min");
$sec = sprintf("%02d", "$sec");
my $date = "$years/$this_mon/$mday $hours:$min:$sec";
return $date;
}









