Cisco config backup Tool では、Catalyst の標準的な Telnet パスワードでログインする場合を前提に作成しています。
Catalyst ではスイッチ本体に登録するユーザ名・パスワードによる認証も可能で、コマンド "aaa new-model" により AAA (Authentication, Authorization, Accounting) が有効な場合にも適用するサンプルです。
$aaa には、AAA が有効なスイッチを追加します。他はユーザ名の追加と $aaa にマッチした場合の条件分岐が主な変更です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 | #!/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 ; } |