4

Perl でログイン プロンプトを自動化しようとしています。

SSHGetCredentials('login_prompt' => 1)perlのExpect::SSHライブラリの機能であるログインプロンプトを生成するために使用しています

これは私のコードがどのように見えるかです。ここでは、ログインプロンプトを呼び出し、入力されたユーザーIDとパスワードを返す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に出力するだけです。

4

1 に答える 1

1

それが最善の方法かどうかはわかりませんが、うまくいきます

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";
}
于 2016-09-14T09:20:41.327 に答える