Хорошо, вот что я пытаюсь сделать. Я пишу программу, которая будет извлекать базу данных keepass с моего телефона (через ssh) и искать в ней любой пароль, который меня интересует. Я хотел бы использовать тот же пароль для базы данных keepass, что и ssh-ключ что я сделал для получения базы данных keepass, но я не хочу вводить пароль дважды. Так. Вот что я подумал: я напишу perl-скрипт, который запрашивает пароль один раз (через ssh-askpass) (это моя функция readpass внизу. Она отлично работает). Я могу прочитать keepass с помощью этого ключа и т. Д. и все хорошо.
Но я не могу понять, как добавить ssh-add без запроса пароля для ключа снова, когда я пытаюсь подключиться к телефону по ssh.
Я попытался создать сценарий оболочки, который просто отображал бы переменную среды, а затем установил SSH_ASKPASS для этого сценария (и установил пароль в переменной среды и установил это в системе ... Вот так:
my $key = readpass();
$ENV{"SSH_ASKPASS_ENV"} = $key;
$ENV{"SSH_ASKPASS"} = "/home/user/bin/ssh-askpass-env";
system("/usr/bin/ssh-add /home/user/.ssh/keepass-retriever");
ssh-askpass-env просто имеет:
#! /bin/sh
echo "${SSH_ASKPASS_ENV}"
Но, похоже, этого не происходит, он все равно запрашивает мой пароль. Я могу проверить, что ssh-askpass-env вызывается и что он получает пароль.
Думаю, мой вопрос: как я могу добавить ключ к ssh-agent из Perl, используя заранее заданный пароль? (Поскольку я только что прочитал пароль из readpass () ниже)
Спасибо!
sub readpass() {
my $passwd = undef;
if (defined($ENV{"DISPLAY"})) {
if (open(PASSWD, "/usr/bin/ssh-askpass 'KeePass' |")) {
chomp($passwd = <PASSWD>);
close(PASSWD);
}
}
else {
ReadMode('noecho');
printf("Enter keepass password: ");
$passwd = ReadLine(0);
chomp($passwd);
ReadMode('normal');
}
return($passwd);
}