gpt4 book ai didi

perl - 如何使用 IPC::Run 回答 rsync 密码提示?

转载 作者:行者123 更新时间:2023-12-01 05:08:47 25 4
gpt4 key购买 nike

我没有 Expect,也无法在我的机器上运行。我不使用 rsync 的 ssh key 对,但会提供一个密码(不,密码没有存储在脚本或其他地方 - 它只是一个从某个地方获取密码并必须插入它的程序)。我在 Windows x64 上使用 cygwin

我尝试使用 IPC::Run 来处理它但我失败了。不知何故,密码提示似乎与正常提示不同。

这个有效:

复制脚本ask.pl生成提示:

#!perl
use strict;
use warnings;

print "enter something:\n";
my $answer = <STDIN>;
print "your answer was: $answer\n";
exit(0);

回答 ask.pl 的 prmot 的复制脚本:

#!perl
use strict;
use warnings;
use IPC::Run qw( start pump finish timeout );

my @cmd = ( "perl", "ask.pl" );

my $in = "ask something:\n";
my $out;
my $h = start( \@cmd, \$in, \$out, timeout(5) );

pump $h until $in =~ /something:/;
$in = "1234\n";
finish $h or die "app returned $?";

print "done";

这不起作用:

#!perl
use strict;
use warnings;
use IPC::Run qw( start pump finish timeout );

my @cmd = ( 'rsync', '-avr', 'user@host:/som/path/in/filesystem', '/target/folder' );

my $in = "password:\n";
my $out;
my $h = start( \@cmd, \$in, \$out, timeout(5) );

pump $h until $in =~ /password:/;
$in = "secret-password-here\n";
finish $h or die "app returned $?";

print "$out";
print "done";

那么我该如何提供rsync的密码呢?

我查看了其他线程(为 SCP/SSH 等提供密码),但解决方案是使用 Expcect 或 key 对。但是我不能使用 Expect 或 key 对。

最佳答案

您需要进行 3 项更改。

  1. 你必须使用 pseudo tty捕获密码提示。
  2. 要使其在 IPC::Run 中运行,您必须 run bash first然后是你想要的命令。
  3. 您需要将 $out/password:/ 而非 $in 匹配。

脚本如下,希望对你有帮助

#!perl
use strict;
use warnings;
use IPC::Run qw( start pump finish timeout );

my @cmd = ('bash', '-c', 'rsync -avr user@host:/som/path/in/filesystem /target/folder');

my $in;
my $out;
my $h = start \@cmd, '<pty<', \$in, '>pty>', \$out, timeout(5);

pump $h until $out =~ /password:/;
$in = "secret-password-here\n";
finish $h or die "app returned $?";

print "$out";
print "done";

关于perl - 如何使用 IPC::Run 回答 rsync 密码提示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26138401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com