【发布时间】:2014-10-01 09:40:09
【问题描述】:
我没有 Expect,也无法让它在我的机器上运行。 我不使用 rsync 的 ssh 密钥对,但会提供密码(不,密码没有存储在脚本或其他地方 - 它只是一个从某个地方获取密码并必须插入它的程序)。 我在 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 或密钥对。但我不能使用 Expect 或密钥对。
【问题讨论】:
-
怎么样?当然使用期望或密钥对(对不起)。
-
您可以在
plink之上运行rsync,它可以获得密码作为命令行参数。 -
@AKHolland 我不能使用 Expect,也不能使用密钥对方法。我正在寻找另一种方式。我想以某种方式“简单地”将密码写入提示符是可能的。
-
这似乎与a problem I had 相似,这是由于使用另一种类型的读取来获取密码。
-
Qtax 的解决方案看起来很有希望。在 Linux 或 cygwinm 上,似乎有一个使用期望的解决方案:stackoverflow.com/questions/12029140/…