2016-07-18 11 views
4

Ich versuche, ein Login-Prompt in Perl zu automatisierenAutomate und Capture-Login-Prompt durch Perl erwarten

I SSHGetCredentials('login_prompt' => 1) bin mit einer Anmeldeaufforderung zu erzeugen, die eine Funktion der Expect::SSH der Perl-Bibliothek

Dies ist Wie mein Code aussieht, hier REST::Client->getCredentials() ruft intern SSHGetCredentials('login_prompt' => 1) auf, die eine Login-Aufforderung aufrufen und die eingegebene Benutzer-ID und das Kennwort zurückgeben würde.

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"); 

Jetzt möchte ich, um zu überprüfen, ob Benutzername oder das Passwort ist, was ich bestanden haben, so dass ich möchte, dass sie erfassen und zu vergleichen.

Wie kann ich sie erfassen?

Ich versuchte dies:

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); 

aber $value hat nichts und $exp->expect(1) druckt nur die Werte in STDOUT.

Antwort

1

Nicht sicher, ob es der beste Weg ist, aber es funktioniert

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"; 
}