2012-04-10 14 views
1

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.

+0

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

+0

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

+0

@weismat: So aktivieren Sie das Debuggen für dieses Modul nicht. – Borodin

Antwort

1

Bitte zeigen Sie mehr von Ihrem Code. Was ist der Wert von $cmd?

Beachten Sie, dass die Methode login keine Anmeldung durchführt: Sie speichert lediglich den Benutzernamen und das Kennwort, die verwendet werden sollen, wenn die Verbindung für jeden Anruf cmd eingerichtet wird.

Die richtige Art und Weise der Debug-Meldungen ermöglicht ist

my $ssh = Net::SSH::Perl->new($remote_host, debug => 1); 

Diese Sie Informationen aus dem cmd Methode Spuren geben, die

Sie unter anderem sagen sollte
Sending command: xxx 
Entering interactive session. 

und sollte einige Hinweise geben über Was läuft falsch?


Ihr Debug-Ausgang zeigt das Problem an. Betrachten Sie SSH2.h, öffnen Fehlergrund 4 ist SSH2_DISCONNECT_HOST_AUTHENTICATION_FAILED. Ihr Benutzername und Passwort sind falsch.

+0

Ich habe den vollständigen Code unter "EDIT2" hinzugefügt. – Sakura

+0

Danke. Ich habe meine Antwort hinzugefügt, um Ihren Fehler zu erklären. Was sind die Inhalte von $ err und $ exit nach dem Aufruf? – Borodin

+0

Hallo. Ich bin mir ziemlich sicher, dass der Benutzername und das Passwort korrekt sind, da ich die gleichen Zugangsdaten verwendet habe und Net :: SSH und Expect verwendet habe, um den Login zu codieren, und es gibt mir keinen Fehler. Tatsächlich ist es gelungen, die Willkommensnachricht auszudrucken, wenn ich mich erfolgreich am System angemeldet habe. – Sakura

Verwandte Themen