好的,这就是我想要做的。我正在编写一个程序,它将从我的手机(通过 ssh)中检索一个 keepass 数据库,并在其中搜索我感兴趣的任何密码。我想为 keepass 数据库使用与 ssh 密钥相同的密码我为检索 keepass 数据库所做的,但我不想输入两次密码。所以。这就是我的想法:我将编写一个 perl 脚本,要求输入一次密码(通过 ssh-askpass)(这是我在底部的 readpass 函数。它工作正常。)我可以通过那个键等读取 keepass,一切都很好。
但是,当我尝试 ssh 到手机时,我似乎无法弄清楚如何添加 ssh-add 而不提示我再次输入密钥的密码。
我尝试制作一个简单地回显环境变量的 shell 脚本,然后将 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 ,并且它正在获取密码。
我想我的问题是:如何使用预先指定的密码从 perl 中向 ssh-agent 添加密钥?(因为我刚刚从下面的 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);
}