tl-telnet
功能:
批量运行cmd.list中的命令。
tl-telnet依次从ip.list读取主机,并运行cmd.list中的命令。
应用场景:
大量cisco设备中需要运行相同的命令。
如配置大量的cisco设备,或备份大量的cisco设备的配置文件等等
使用办法
step1:将tl-telnet.pl代码保存并设置可执行权限。
step2:建立ip.list、cmd.list文件。
step3:运行
#tl-telnet -h ip.list -c cmd.list -l log.txt
其中log.txt是操作日志文件。
提示:
1.在ip.list文件中,主机名称或用户名称或密码中不能存在"#"字符。
是由于"#"被当作注解文字的开始。
2.在ip.list中列出的所有主机的telnet端口(23)必须有效,否则系统会自动中止遍历下面的主机。
3.在ip.list中列出必须有效,否则系统会自动中止遍历下面的主机。
4.在cisco设备中,在使能模式(#)下可以使用“exit”或“quit”退出vty.
但在Net::Telnet::Cisco中,禁止在使能模式(#)下可以使用“exit”或“quit”退出vty。
所以在cmd.list文件中,当命令模式位于使能模式时禁止使用“exit”“quit”命令。
但在配置模式下可以使用“exit”或“quit”。
重要提示:
在Net::Telnet::Cisco中的cmd方法操作中有bug存在,若输入给cmd方法的命令变量采用“$_”时,系统会出错。
如:
foreach $cmd(@cmdList)
{
$session->cmd($cmd); //必须定义一个变量如$cmd来给转定数组@cmdList成员,禁止采用“$_”
}
$session->close;
tl-tlnet.pl代码
-
#!/usr/bin/perl
-
# Version : 0.1
-
# Date : 2012-04-26
-
-
# Licence : GPL - http://www.fsf.org/licenses/gpl.txt
-
-
use strict;
-
use Getopt::Std;
-
use Net::Telnet::Cisco;
-
sub trim;
-
sub main_sub;
-
sub readfile;
-
sub GetScriptName;
-
sub usage;
-
#use Net::Telnet;
-
-
my $script = GetScriptName($0);
-
my $script_version = "0.1";
-
my @ipList;
-
my @cmdList;
-
my @logText;
-
my $logfile;
-
-
if (@ARGV < 1) {
-
print "Too few arguments\n";
-
usage();
-
exit 1;
-
}
-
-
my %opt=();
-
getopts("Hvh:c:l:",\%opt);
-
-
if($opt{H} || $opt{v})
-
{
-
usage();
-
exit(0);
-
}
-
-
if ( (defined $opt{h}) && (defined $opt{c}) && (defined $opt{l}) )
-
{
-
open (IPLIST, "<$opt{h}") || die ("Could not open file : $!");
-
@ipList = readfile(<IPLIST>);
-
open (CMDLIST, "<$opt{c}") || die ("Could not open file : $!");
-
@cmdList = readfile(<CMDLIST>);
-
$logfile = $opt{l};
-
-
main_sub();
-
-
close IPLIST;
-
close CMDLIST;
-
}
-
else
-
{
-
usage();
-
exit(1);
-
-
}
-
-
-
####################################################################
-
# sub program #
-
####################################################################
-
sub main_sub
-
{
-
#test;
-
#foreach (@ipList)
-
#{ print $_,"\n";}
-
-
#print "--------------------------\n";
-
-
#foreach (@cmdList)
-
#{ print $_,"\n";}
-
-
#-----------------------
-
my @hostinfo;
-
system("/bin/echo > $logfile");
-
my $tmpFile = "temp.log";
-
foreach (@ipList)
-
{
-
my $MB = 1024 * 1024;
-
@hostinfo = split(" ",$_);
-
system("/bin/echo > $tmpFile");
-
my $session = new Net::Telnet::Cisco(Host => $hostinfo[0], Input_log => $tmpFile);
-
$session->max_buffer_length(5 * $MB);
-
$session->login($hostinfo[1],$hostinfo[2]);
-
$session->enable($hostinfo[3]);
-
my $cmd;
-
foreach $cmd(@cmdList)
-
{
-
$session->cmd($cmd);
-
}
-
$session->close;
-
system("/bin/cat $tmpFile >> $logfile");
-
system("/bin/rm -fr $tmpFile");
-
}
-
}
-
-
-
-
sub usage {
-
print << "USAGE";
-
--------------------------------------------------------------------
-
$script v$script_version
-
-
View Interface status on Cisco devices
-
-
Usage: $script -h <device list file> -c <command list file> [...]
-
Options: -h Hostname or IP address list file
-
-c command list file
-
-l log output file
-
-H or -v help
-
-
--------------------------------------------------------------------
-
-
-
This program is free software; you can redistribute it or modify
-
it under the terms of the GNU General Public License
-
--------------------------------------------------------------------
-
-
USAGE
-
}
-
-
sub trim
-
{
-
my $restr = $_[0];
-
$restr=~s/^ +//;
-
$restr=~s/ +$//;
-
return $restr;
-
}
-
-
-
sub GetScriptName
-
{
-
my @str = @_;
-
my $len = rindex($str[0],"/");
-
return substr($str[0],$len + 1);
-
}
-
-
sub readfile
-
{
-
my $line;
-
my $newstr;
-
my @newArray;
-
foreach $line(@_)
-
{
-
chomp $line;
-
my $len = length($line);
-
if ($len != 0)
-
{
-
my $position = index($line,'#');
-
if ($position != 0)
-
{
-
if ($position == -1)
-
{
-
$newstr = $line;
-
}
-
else
-
{
-
$newstr = substr($line,0,$position);
-
}
-
push @newArray , trim($newstr);
-
}
-
}
-
}
-
return @newArray;
-
}
ip.list格式
# format as flow
# ip username pwd1 pwd2
#Note: can't have char '#' in hostname or username or password
10.1.1.2 admin 123 abc123
10.1.1.3 admin 123 abc123
10.1.1.4 admin 123 abc123
cmd.list格式
#this is cisco command
sh ver
show arp
show run #backup config
阅读(1935) | 评论(0) | 转发(0) |