Получение удаленно выполненных команд вывода в верифицируемой с использованием ожидаемого в Perl - PullRequest
0 голосов
/ 20 февраля 2012

У меня есть переменная пароля $pw и переменная команды $cmd.

$pw=UNIX password of a remote machine.

$cmd=Command to be executed in the remote machine.

теперь, если я запускаю команду, используя back-tick
Я смогу получить какое-то значение в выходной переменной.

Теперь, если я хочу выполнить ту же команду, ожидая, как добиться того же самого. Я имею в виду, как получить результат команды через ожидание в переменной.

моя ожидаемая функция имеет вид:

  sub expt($$){
my $cmd;
my $timeout;
    ($cmd, $pw)=@_;
$expect = Expect->new;
$expect->raw_pty(1);
printDebug("Running the command under expt");
$expect->spawn($cmd)
    or die "Cannot spawn $cmd: $!\n";
$expect->expect($timeout,
            [   qr/password:/i, #/
                sub {
                    my $self = shift;
                    $self->send("$pw\n");
                    exp_continue;
                }
            ],
            [qr/Are you sure you want to continue connecting \(yes\/no\)?/
                , sub { my $self = shift;
                                   $self->send("yes\n");
                                   exp_continue; }],
             [qr/Unix password \(user\):/
               , sub { my $self = shift;
                                   $self->send("pw\n");
                                   exp_continue; } 
             ],                      
                  );

$expect->soft_close();
   return 0;             
 }

И я вызываю функцию как

expt($cmd,$pw);

Благодаря этому я могу выполнить скрипт на удаленном хосте, но мое требование - сохранить выходные данные удаленного хоста в локальной переменной.

1 Ответ

1 голос
/ 20 февраля 2012

Почему бы не использовать Net::SSH::Expect? Это было бы ближе к первому способу: вам просто нужно сделать что-то подобное:

my $ssh = Net::SSH::Expect->new (
        host => "myserver.com", 
        user => 'myuser', 
        raw_pty => 1
    );
$ssh->run_ssh() or die "SSH process couldn't start: $!";
($ssh->read_all(2) =~ />\s*\z/) or die "where's the remote prompt?"
$ssh->exec("stty raw -echo");
my $output = $ssh->exec($cmd);

Посмотрите Net::SSH::Expect документацию на стручки, она довольно обширна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...