2010-04-28 5 views
1

J'utilise le code suivant pour me connecter à une machine distante et essayer d'exécuter une commande simple sur une machine distante.Comment puis-je exécuter une commande sur un ordinateur distant avec Perl?

#!/usr/bin/perl 
#use strict; 
use warnings; 
use Net::Telnet; 

$telnet = new Net::Telnet (Timeout=>2, Errmode=>'die'); 
$telnet->open('172.168.12.58'); 
$telnet->waitfor('/login:\s*/'); 
$telnet->print('admin'); 
$telnet->waitfor('/password:\s*/'); 
$telnet->print('Blue'); 

#$telnet->cmd('ver > C:\\log.txt'); 
$telnet->cmd('mkdir gy'); 

Mais quand je l'exécution de ce script, il est de lancer des messages d'erreur

[[email protected]]# perl tt.pl 
command timed-out at tt.pl line 12 
+1

Quel OS que vous utilisez? – Space

+0

Y at-il une raison pour laquelle vous avez commenté 'use strict;'? – Ether

Répondre

5

À partir de votre code, il semble que vous avez * nix. Utilisation du module perl Net::SSH::Perl rendre plus facile

Exemple de code:

#!/usr/bin/perl -w 
use strict; 
use Net::SSH::Perl 
my $cmd = 'command'; 
my $ssh = Net::SSH::Perl->new("hostname", debug=>0); 
$ssh->login("username","password"); 
my ($stdout,$stderr,$exit) = $ssh->cmd("$cmd"); 
print $stdout; 

et exemple de code pour Net :: Telnet

use Net::Telnet(); 
    my $t = new Net::Telnet (Timeout => 10, 
          Prompt => '/bash\$ $/'); 
    $t->open("sparky"); 
    $t->login($username, $passwd); 
    my @lines = $t->cmd("who"); 
    print @lines; 

Vous pouvez regarder plus par exemple pour Net Telnet Examples

0

Vous devrez peut-être fournir un paramètre de constructeur "prompt" - voir this thread

L'exemple ils ont donné:

my $telnet = new Net::Telnet (
    Timeout=>10, 
    Prompt=>'/Bilbo>$/i', #### <<<============== 
    Errmode=>'die', 
    Dump_Log=>'dump.txt', 
    Input_log=>'input.txt', 
    Output_log=>'output.txt', 
); 
Questions connexes