【发布时间】:2018-10-12 04:40:42
【问题描述】:
我不知道我是否成功安装了Net::SSH::Perl 模块,但我似乎无法运行以下代码:
my $ssh = Net::SSH::Perl->new($remote_host);
$ssh->login($username, $password);
print "login done", "\n";
my ($out, $err, $exit) = $ssh->cmd($cmd);
print "$out", "\n";
我可以登录但无法打印$out。我不断收到此错误:
Use of uninitialized value $out in string at test_ssh.pl line 28.
第 28 行指的是print "$out", "\n";。
我在 Cygwin 上运行此代码。我现在该怎么办?
编辑:
我在运行my $ssh = Net::SSH::Perl->new($remote_host, options => ["Debug yes"]); 时收到以下错误消息:
Use of uninitialized value $out in string at test_ssh.pl line 29 (#1)
(W uninitialized) An undefined value was used as if it were already
defined. It was interpreted as a "" or a 0, but maybe it was a mistake.
To suppress this warning assign a defined value to your variables.
To help you figure out what was undefined, perl will try to tell you the
name of the variable (if any) that was undefined. In some cases it cannot
do this, so it also tells you what operation you used the undefined value
in. Note, however, that perl optimizes your program and the operation
displayed in the warning may not necessarily appear literally in your
program. For example, "that $foo" is usually optimized into "that "
. $foo, and the warning will refer to the concatenation (.) operator,
even though there is no . in your program.
编辑2: 这是我的完整代码
use strict;
use warnings;
use Net::SSH::Perl;
my $remote_host = '<host ip address>';
my $password = 'pass';
my $username = 'user';
my $cmd = 'copy run tftp:<my own ip address>';
warn "Starting SSH Services:...";
my $ssh = Net::SSH::Perl->new($remote_host, debug => 1);
print "done", "\n";
warn "Starting Login:...";
$ssh->login($username, $password);
print "login done", "\n";
warn "Starting command:...";
#$ssh->cmd($cmd);
#my($stdout, $stderr, $exit) = $ssh->cmd($cmd);
my ($out, $err, $exit) = $ssh->cmd($cmd);
print "$out", "\n";
"print "$out","\n";" 上的错误信息行:
<Computername>: channel 1: new [client-session]
<Computername>: Requesting channel_open for channel 1.
<Computername>: Entering interactive session.
<Computername>: Channel open failure: 1: reason 4:
Use of uninitialized value $out in string at test_ssh.pl line 29.
最后编辑:我决定改用 Net::Appliance::Session 通过 SSH 登录到网络设备。它比 Net::SSH::Perl 更容易使用。
【问题讨论】:
-
用我的 $ssh = Net::SSH::Perl->new($remote_host, options => ["Debug yes"]);打印前检查 err 的值。如果您不确定,请向我们展示 off err 的值和调试输出。
-
它是"打印"$out", "\n";"。添加您给我的代码后,我收到了相同的错误消息(除了行号不同但指的是同一行代码)。
-
@weismat:这不是您为此模块启用调试的方式。
-
你运行的 cmd 是什么?
-
@user967552,我正在使用 Cygwin,如果这就是你的意思。