此脚本用于连接到交换机并打印其vlan列表,但输出为:
Use of uninitialized value $stdout1 at line 15
#! /usr/bin/perl
use strict;
use warnings;
use Net::SSH::Perl;
no strict;
my $host = "10.220.15.24";
my $user = "admin";
my $password = "admin";
my $ssh = Net::SSH::Perl->new($host);
$ssh->login( $user, $password );
print "check the version of the build \n";
print "enter the config mode \n";
print " ahmed ";
my ($stdout1) = $ssh->cmd("show vlan");
print $stdout1 ;
答案 0 :(得分:4)
写作perl的规则1。 use strict;
use warnings;
。
使用no strict
再次关闭它不算数!
但即使启用了strict
,我也无法复制您的问题。我能想到的是Net::SSH::Perl
cmd
函数没有返回结果。
您可能需要更明确地检查它:
my ($result, $errors, $exitcode ) = $ssh->cmd("show vlan");
print "$exitcode $errors\n";
print "$result\n";
我猜你的连接出了问题(密码可能无效?)
答案 1 :(得分:2)
您关闭了strict
?为什么?如果遇到问题,请解决问题,不要忽视它。
ssh->login
有效吗? Net::SSH::Perl->new
了吗?使用or die
验证他们确实返回了某些内容。ssh-cmd
返回三个成员数组:
STDOUT
。STDERR
。注意在这个程序中,我检查每个方法返回Net::SSH::Perl
类。
#! /usr/bin/env perl
use strict;
use warnings;
use feature qw(say); # Replaces 'print' with 'say'
use Net::SSH::Perl;
use constant {
HOST => '10.220.15.24',
USER => 'admin',
PASSWORD => 'admin',
};
my $ssh = Net::SSH::Perl->new( HOST )
or die qq(Can't SSH to host.);
$ssh->login( USER, PASSWORD );
or die qq(Can't log into host.);
say "check the version of the build";
say "enter the config mode";
say " ahmed ";
my ( $stdout, $stderr, $exit_code ) = $ssh->cmd("show vlan")
or die qq(Can't execute command.);
if ( $exit_code ) {
say "Command returned an exit code of $exit_code"
}
say $stdout;
您还可以在创建debug
对象时传递$ssh
选项:
my $ssh = Net::SSH::Perl->new( HOST, { debug => 1 } );
这可能会为您提供更多有关正在发生的事情的线索。