Добавление ключа к SSH-агенту из perl

Хорошо, вот что я пытаюсь сделать. Я пишу программу, которая будет извлекать базу данных 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);
}

person bnsh    schedule 01.01.2013    source источник


Ответы (1)


После прочтения страницы руководства ssh-add я обнаружил, что отключение терминала сработало:

system("/usr/bin/ssh-add /home/user/.ssh/keepass-retriever < /dev/null &>/dev/null");
person ashley    schedule 02.01.2013