Автоматизировать и захватить приглашение к входу через Perl

perl expect.pm

220 просмотра

1 ответ

432 Репутация автора

Я пытаюсь автоматизировать приглашение в Perl

Я использую SSHGetCredentials('login_prompt' => 1)для создания приглашения для входа , который является функцией языка Perl Expect::SSHбиблиотеки

Вот так выглядит мой код, здесь REST::Client->getCredentials()внутренние вызовы, SSHGetCredentials('login_prompt' => 1)которые вызовут приглашение на вход в систему и вернут введенный идентификатор пользователя и пароль.

use Expect;
my $command = "perl -e 'use REST::Client; REST::Client->getCredentials()'";
my $exp = Expect->spawn($command) || die "i am done";
$exp->expect(undef, 'Login on Remote:');
$exp->send("user\n");
$exp->expect(undef, 'Password of user:');
$exp->send("12345\n");

Теперь я хочу проверить, передали ли я имя пользователя или пароль, поэтому хочу их записать и сравнить.

Как я могу захватить их?

Я попробовал это:

use Expect;
my $command = "perl -e 'use REST::Client; \$tmp = REST::Client->getCredentials();print \$tmp->{'username'};print \" \";print \$tmp->{'password'};'";
my $exp = Expect->spawn($command) || die "i am done";
$exp->expect(undef, 'Login on Remote:');
$exp->send("user\n");
$exp->expect(undef, 'Password of user:');
$exp->send("12345\n");
my $value = $exp->expect(1);

но не $valueимеет ничего и $exp->expect(1)просто печатает значения в STDOUT.

Автор: Bad_Coder Источник Размещён: 18.07.2016 03:45

Ответы (1)


1 плюс

432 Репутация автора

Решение

Не уверен, что это лучший способ, но он работает

use Expect;
my $command = "perl -e 'use REST::Client; \$tmp = REST::Client->getCredentials();print \$tmp->{'username'};print \" \";print \$tmp->{'password'};'";
my $exp = Expect->spawn($command) || die "i am done";
$exp->expect(undef, 'Login on Remote:');
$exp->send("user\n");
$exp->expect(undef, 'Password of user:');
$exp->send("12345\n");
if ($exp->expect(undef,'-re','user 12345') == 1) {
    print "matched\n";
}
Автор: Bad_Coder Размещён: 14.09.2016 09:20
Вопросы из категории :
32x32