У меня нет ожиданий, и я не заставляю его работать на моей машине. Я не использую пару ключей ssh для rsync, но будет предоставлять пароль (нет, пароль не хранится в скрипте или где-то еще - это просто программа, откуда-то откуда-то откуда-то передается пароль и ее нужно вставить). Я использую cygwin на Windows x64Как ответить на запрос пароля rsync с помощью IPC :: Run?
Я попытался обработать его, используя IPC::Run
, но мне не удалось. Так или иначе, подсказка пароля, похоже, ведет себя иначе, чем обычное приглашение.
Это работает:
Размножение сценарий ask.pl генерировать подсказку:
#!perl
use strict;
use warnings;
print "enter something:\n";
my $answer = <STDIN>;
print "your answer was: $answer\n";
exit(0);
Размножение сценарий ответить prmot ask.pl в:
#!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', '[email protected]:/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 или пару ключей.
Как? Использование ожидания или ключевой пары конечно (извините). – AKHolland
Возможно, вы можете запустить 'rsync' поверх' plink', который может получить пароль в качестве аргумента командной строки. – salva
@AKHolland Я не могу использовать Expect, и я не могу использовать метод key-pair. Я ищу другой путь. Я думаю, что так просто «просто» записать пароль в приглашение. – capfan