モジュールを正常にインストールできたかどうかはわかりませんが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.
EDIT2:これが私の完全なコードです
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 よりもはるかに使いやすいです。