我正在尝试创建一个ksh包装脚本,该脚本检索密码然后调用一个perl脚本,但是perl脚本认为仅按下了enter键,因此会不断提示。
我无法更改perl脚本。
我创建了一个存根Perl脚本,它提示输入,并且接受包装程序的输入。我已经尝试过$var | Perl perlscript.pl
和value | Perl perlscript.pl
。还尝试了perl perlscript.pl << ANSWERS $var ANSWERS
和echo $var | perl perlscript.pl
和echo $(derive password) | perl perlscript.pl
。
我尝试过
$var | Perl perlscript.pl
和value | Perl perlscript.pl
– spudnik267 Sep 26 at 9:09[也尝试过
perl perlscript.pl << ANSWERS $var ANSWERS
和echo $var | perl perlscript.pl
和echo $(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();