Perl脚本提示输入密码,但不接受来自ksh的输入

时间:2019-09-26 08:59:43

标签: perl

我正在尝试创建一个ksh包装脚本,该脚本检索密码然后调用一个perl脚本,但是perl脚本认为仅按下了enter键,因此会不断提示。

我无法更改perl脚本。

我创建了一个存根Perl脚本,它提示输入,并且接受包装程序的输入。我已经尝试过$var | Perl perlscript.plvalue | Perl perlscript.pl。还尝试了perl perlscript.pl << ANSWERS $var ANSWERSecho $var | perl perlscript.plecho $(derive password) | perl perlscript.pl

1 个答案:

答案 0 :(得分:1)

  

我尝试了$var | Perl perlscript.plvalue | Perl perlscript.pl – spudnik267 Sep 26 at 9:09

     

还尝试了perl perlscript.pl << ANSWERS $var ANSWERSecho $var | perl perlscript.plecho $(derive password) | perl perlscript.pl – spudnik267 Sep 26 at 10:10

密码通常不会从STDIN中读取。而是直接从psuedoterminal or PTY中读取它们。这意味着它是从控制终端程序而不是从STDIN读取的。这是一种过时的安全措施,旨在使自动填写密码更加困难。对于饼干来说,这是一个减速带,但对其他所有人来说却非常不方便。

这是一个简单的程序,可以回显PTY的输入。

open my $fh, "/dev/tty" or die $!;
print while <$fh>;

该程序将看不到输入到STDIN的输入。它只会显示您在终端上键入的内容。

有多种方法可以与程序的PTY进行通信。功能最强大的方法之一就是使用Expect

#!/usr/bin/env perl

use Expect;

my $exp = Expect->spawn("perl tty.pl") or die $!;
$exp->send("test\n");
$exp->soft_close();