【问题标题】:Perl script prompts for password but does not accept input from kshPerl 脚本提示输入密码,但不接受来自 ksh 的输入
【发布时间】:2019-11-07 21:12:25
【问题描述】:

我正在尝试创建一个检索密码然后调用 perl 脚本的 ksh 包装脚本,但是 perl 脚本认为只有输入被按下所以一直提示。

我无法更改 perl 脚本。

我创建了一个提示输入的存根 Perl 脚本,它接受来自包装器的输入。我试过$var | Perl perlscript.plvalue | Perl perlscript.pl。也试过perl perlscript.pl << ANSWERS $var ANSWERSecho $var | perl perlscript.plecho $(derive password) | perl perlscript.pl

【问题讨论】:

  • Perl 脚本如何读取密码?
  • 你试过什么?向我们展示您的代码。
  • Perl 脚本是供应商提供的,我无法确定它如何读取密码
  • 你有什么问题?
  • @spudnik267:如您所见,将代码放入 cmets 并不是很有帮助。请edit your question添加您的示例代码。

标签: perl


【解决方案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 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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-28
    • 2013-10-10
    相关资源
    最近更新 更多