Perl Telnet/SSH未响应的设备,显示错误
我遇到了一个奇怪的问题。我有一些设备存在Telnet/SSH问题。当我运行脚本时,结果显示脚本成功。当调试打开时,我会得到以下结果Perl Telnet/SSH未响应的设备,显示错误,perl,network-programming,Perl,Network Programming,我遇到了一个奇怪的问题。我有一些设备存在Telnet/SSH问题。当我运行脚本时,结果显示脚本成功。当调试打开时,我会得到以下结果 [ 0.012464] pr finding prompt [ 0.016593] tr creating Net::Telnet wrapper for telnet [ 0.017859] tr connecting with: telnet Host 10.xx.xx.xx Port 23 如果promot不存在或连接超时,我如何添加一些东西来显
[ 0.012464] pr finding prompt
[ 0.016593] tr creating Net::Telnet wrapper for telnet
[ 0.017859] tr connecting with: telnet Host 10.xx.xx.xx Port 23
如果promot不存在或连接超时,我如何添加一些东西来显示错误
谢谢
#!/usr/bin/perl
use Net::Appliance::Session;
$file = '1list';
open (FH, "< $file") or die "Can't open $file for read: $!";
my @ios_list = <FH>;
close FH or die "Cannot close $file: $!";
chomp(@ios_list);
my $ios_username = 'xxxx';
my $ios_password = 'xxxx';
DEVICE:
for my $ios_device_ip ( @ios_list ) {
my @version_info;
my $proto = shift;
if (($proto == 43)||($proto == 44)){
$tran = "SSH";
$app="/usr/local/bin/ssh";
}else{
$tran = "Telnet";
$app="/bin/telnet";
}
my $session_obj = Net::Appliance::Session->new(
host => $ios_device_ip,
transport => $tran,
personality => 'ios',
);
#interace
eval {
# try to login to the ios device, ignoring host check
$session_obj->connect(
username => $ios_username,
password => $ios_password,
#SHKC => 0
);
# get our running config
$session_obj->begin_privileged;
$session_obj->cmd('conf t');
$session_obj->cmd('aaa authorization config-commands');
$session_obj->cmd('exit');
$session_obj->end_privileged;
$session_obj->cmd('write memory');
# close down our session
$session_obj->close;
};
#error check
if ($@) {
if ( UNIVERSAL::isa($@, 'Net::Appliance::Session::Exception') ) {
# fault description from Net::Appliance::Session
print "We had an error during our Telnet/SSH session to device : $ios_devi
ce_ip \n";
print $@->message . " \n";
# message from Net::Telnet
print "Net::Telnet message : " . $@->errmsg . "\n";
# last line of output from your appliance
print "Last line of output from device : " . $@->lastline . "\n\n";
}
elsif (UNIVERSAL::isa($@, 'Net::Appliance::Session::Error') ) {
# fault description from Net::Appliance::Session
print "We had an issue during program execution to device : $ios_device_ip
\n";
# print $@->message . " \n";
}
else {
# we had some other error that wasn't a deliberately created exception
print "We had an issue when accessing the device : $ios_device_ip \n";
print "$ios_device_ip The reported error was : $@ \n";
}
next DEVICE;
}
print @version_info;
print "$ios_device_ip ok \n";
#end
}
#/usr/bin/perl
使用Net::Appliance::Session;
$file='1list';
打开(FH,“<$file”)或死亡“无法打开$file进行读取:$!”;
我的@ios_列表=;
关闭FH或die“无法关闭$file:$!”;
chomp(@ios_list);
我的$ios_用户名='xxxx';
我的$ios_密码='xxxx';
设备:
对于我的$ios\u设备\u ip(@ios\u列表){
我的@version\u信息;
我的$proto=shift;
如果(($proto==43)| |($proto==44)){
$tran=“SSH”;
$app=“/usr/local/bin/ssh”;
}否则{
$tran=“Telnet”;
$app=“/bin/telnet”;
}
我的$session\u obj=Net::Appliance::session->new(
主机=>$ios\U设备\U ip,
运输=>$tran,
个性=>“ios”,
);
#间隔
评估{
#尝试登录到ios设备,忽略主机检查
$session_obj->connect(
用户名=>$ios\u用户名,
密码=>$ios\U密码,
#SHKC=>0
);
#获取我们的运行配置
$session\u obj->begin\u privileged;
$session_obj->cmd('conf t');
$session_obj->cmd('aaa授权配置命令');
$session_obj->cmd('exit');
$session_obj->end_privileged;
$session_obj->cmd('write memory');
#结束我们的会议
$session_obj->close;
};
#错误检查
如果($@){
if(UNIVERSAL::isa($@,'Net::Appliance::Session::Exception')){
#来自Net::Appliance::Session的故障描述
print“我们在与设备的Telnet/SSH会话中出错:$ios\u devi
ce_ip\n”;
打印$@->消息。“\n”;
#来自网络的消息::Telnet
打印“Net::Telnet消息:“.$@->errmsg.”\n;
#设备的最后一行输出
打印“设备输出的最后一行:“.$@->最后一行”。\n\n”;
}
elsif(UNIVERSAL::isa($@,'Net::Appliance::Session::Error')){
#来自Net::Appliance::Session的故障描述
打印“在程序执行期间,我们在设备上遇到问题:$ios\U设备\U ip
\n”;
#打印$@->消息。“\n”;
}
否则{
#我们还有一些不是故意创建的异常的错误
打印“访问设备时出现问题:$ios\U设备\U ip\n”;
打印“$ios\U设备\U ip报告的错误为:$@\n”;
}
下一个设备;
}
打印@version\u info;
打印“$ios\U设备\U ip正常\n”;
#结束
}
如果您在连接时遇到问题,在评估后检查$@可能会有所帮助,因为您可能忽略了一个错误
#interace
eval {
# try to login to the ios device, ignoring host check
$session_obj->connect(
username => $ios_username,
password => $ios_password,
#SHKC => 0
);
还值得注意的是,这没有任何作用:
my $proto = shift;
if (($proto == 43)||($proto == 44)){
$tran = "SSH";
$app="/usr/local/bin/ssh";
}else{
shift
在未填充的@
上运行,因此$proto
将始终是undef