Скрипт такой, правда используется библиотека Net::Telnet. С Net::SSH::Perl есть проблемы, он под виндой не работает, под *nix пожалуйста.
Формат входного файла такой
Название\tDNS имя\tIP address\tТип оборудования\tLocation
Cisco 3745 aaa.cisco.com 192.168.1.1 Router г. Москва
Catalyst 6513 camp01.cisco.com 192.168.0.12 Switch г. МоскваСобственное сам скрипт:
#!c:Perl/bin/perl
use Net::Telnet;
use Net::Ping;
use Term::ReadKey;
#------------------------------------------------
$out_f='result.txt';
if ($#ARGV != 0){
die "Usage: net-telnet.pl <input textfile with <tab> delimiter>\n";
}
$inp_f=$ARGV[0];
#----------------------------------------------------------------
open(INP,"<$inp_f") || die "Error opening input file\n";
open(OUT,">$out_f") || die "Error opening output file\n";
#------------------------------------------------
$cmd='sh ver | i Proc';
#Запрос пользователя
print "login as: ";
my $username = ReadLine;
chomp $username;
print 'password: ';
ReadMode 'noecho';
my $password = ReadLine;
ReadMode 'normal';
chomp $password;
print "\r\n";
#------------------------------------------------
while (<INP>) {
($sDisplayName,$sNetworkName,$sNetworkAddress,$sName,$sValue)=split("\t",$_);
$p = Net::Ping->new('icmp');
if ($p->ping($sNetworkAddress,5)){
print "Connecting to $sNetworkName\n";
$conn = new Net::Telnet (Timeout => 5,binmode=>1);
$conn->open($sNetworkAddress);
$conn->waitfor('/Username.*$/');
$conn->print($username);
#print ($conn->get);
$conn->waitfor('/Password.*$/');
$conn->print($password);
#print ($conn->get);
if ($conn){
$conn->print($cmd);
$conn->getline;
$conn->getline;
$conn->getline;
$ser_text=$conn->get;
$ser_text=~/.*?Processor board ID\s([A-Z0-9]+).*/;
$ser=$1;
chop($ser);
print OUT "$sDisplayName\t$sNetworkName\t$sNetworkAddress\t$ser\t$sName\t$sValue";
}
$conn->print('exit');
close $conn;
}
else{
print OUT "$sDisplayName\t$sNetworkName\t$sNetworkAddress\tNO READING\t$sName\t$sValue";
}
$p->close();
}
close(INP);
close(OUT);