Ich weiß nicht, ob ich Net::SSH::Perl
Modul erfolgreich installiert werden verwaltet, aber ich kann nicht den folgenden Code in der Lage sein scheinen zu laufen:Wie Sie SSH-Befehle mit Net :: SSH :: Perl ausführen?
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";
Ich bin in der Lage einzuloggen, aber die $out
nicht drucken kann. Ich erhalte diese Fehlermeldung:
Use of uninitialized value $out in string at test_ssh.pl line 28.
Linie 28 bezieht sich auf print "$out", "\n";
.
Ich verwende diesen Code auf Cygwin. Was sollte ich jetzt tun?
EDIT: bekam ich die folgende Störung Msg, wenn ich my $ssh = Net::SSH::Perl->new($remote_host, options => ["Debug yes"]);
lief:
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: Hier ist meine vollständige Code
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";
Die Fehlermeldung auf „Drucken "$ out", "\ n"; " Leitung:
<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.
LAST EDIT: Ich entschied Net :: Appliance :: Session zu verwenden, anstatt über SSH auf die Netzwerkgeräte anzumelden. es ist viel einfacher zu verwenden als Net :: SSH :: Perl.
Schalten Sie debug mit meinem $ ssh = Net :: SSH :: Perl-> new ($ remote_host, Optionen => [ "Debug ja"]); Überprüfen Sie den Wert von Fehler vor dem Drucken. Wenn Sie sich nicht sicher sind, zeigen Sie uns den Wert off err und die Debug-Ausgabe. – weismat
Es ist "print" $ out "," \ n ";". Ich habe die gleiche Fehlermeldung (außer mit der anderen Zeilennummer, aber bezieht sich auf die gleiche Codezeile) nach dem Hinzufügen des Codes, den Sie mir gegeben haben. – Sakura
@weismat: So aktivieren Sie das Debuggen für dieses Modul nicht. – Borodin