从perl中向SSH代理添加密钥
好的,这就是我要做的。我正在编写一个程序,从我的手机中检索keepass数据库(通过ssh),并在其中搜索我感兴趣的任何密码。我想对keepass数据库使用与检索keepass数据库所用的ssh密钥相同的密码,但我不想输入两次密码。所以下面是我的想法:我将编写一个perl脚本,请求一次密码(通过ssh askpass)(底部是我的readpass函数。它工作正常。)我可以通过该键读取keepass,等等,一切都很好 但是,当我尝试使用ssh连接到手机时,如果没有再次提示我输入密钥的密码,我似乎无法理解如何添加ssh add 我尝试创建一个shell脚本,该脚本只需回显一个环境变量,然后将SSH_ASKPASS设置为该脚本(并在一个环境变量中设置密码和系统设置为…,如下所示:从perl中向SSH代理添加密钥,perl,ssh,ssh-keys,Perl,Ssh,Ssh Keys,好的,这就是我要做的。我正在编写一个程序,从我的手机中检索keepass数据库(通过ssh),并在其中搜索我感兴趣的任何密码。我想对keepass数据库使用与检索keepass数据库所用的ssh密钥相同的密码,但我不想输入两次密码。所以下面是我的想法:我将编写一个perl脚本,请求一次密码(通过ssh askpass)(底部是我的readpass函数。它工作正常。)我可以通过该键读取keepass,等等,一切都很好 但是,当我尝试使用ssh连接到手机时,如果没有再次提示我输入密钥的密码,我似乎无
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代理添加密钥?(因为我刚刚从下面的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);
}
sub readpass(){
我的$passwd=undf;
if(已定义($ENV{“DISPLAY”})){
if(打开(PASSWD,“/usr/bin/ssh askpass‘KeePass’|”)){
chomp($passwd=);
关闭(PASSWD);
}
}
否则{
ReadMode('noecho');
printf(“输入密码:”);
$passwd=ReadLine(0);
chomp($passwd);
读取模式(“正常”);
}
返回($passwd);
}
阅读ssh添加手册页后,我发现分离终端是可行的:
system("/usr/bin/ssh-add /home/user/.ssh/keepass-retriever < /dev/null &>/dev/null");
system(“/usr/bin/ssh add/home/user/.ssh/keepass retriever/dev/null”);