Как я могу запустить команду на удаленной машине с Perl? - PullRequest
1 голос
/ 28 апреля 2010

Я использую следующий код для подключения к удаленной машине и пытаюсь выполнить одну простую команду на удаленной машине.

#!/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');

Но когда я выполняю этот скрипт, он выдает сообщения об ошибках

[root@localhost]# perl tt.pl
command timed-out at tt.pl line 12

Ответы [ 2 ]

5 голосов
/ 28 апреля 2010

Из вашего кода кажется, что у вас есть * nix. Использование модуля Perl Net :: SSH :: Perl делает его более простым

Пример кода:

#!/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;

и пример кода для 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;

Вы можете посмотреть другие примеры для Net Telnet Примеры

0 голосов
/ 28 апреля 2010

Вам может потребоваться указать параметр конструктора "prompt" - см. this thread

Пример, который они дали:

my $telnet = new Net::Telnet (
    Timeout=>10, 
    Prompt=>'/Bilbo>$/i',   #### <<<==============
    Errmode=>'die', 
    Dump_Log=>'dump.txt', 
    Input_log=>'input.txt', 
    Output_log=>'output.txt', 
); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...