好的,所以这就是我要做的。我正在编写一个程序,它将从我的手机中检索一个keepass数据库(通过ssh)并在其中搜索我感兴趣的任何密码。我想使用与ssh-key相同的keepass数据库密码我已经为检索了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);
}
答案 0 :(得分:0)
在阅读ssh-add手册页后,我发现终端工作正在分离:
system("/usr/bin/ssh-add /home/user/.ssh/keepass-retriever < /dev/null &>/dev/null");