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; }