Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从perl中向SSH代理添加密钥_Perl_Ssh_Ssh Keys - Fatal编程技术网

从perl中向SSH代理添加密钥

从perl中向SSH代理添加密钥,perl,ssh,ssh-keys,Perl,Ssh,Ssh Keys,好的,这就是我要做的。我正在编写一个程序,从我的手机中检索keepass数据库(通过ssh),并在其中搜索我感兴趣的任何密码。我想对keepass数据库使用与检索keepass数据库所用的ssh密钥相同的密码,但我不想输入两次密码。所以下面是我的想法:我将编写一个perl脚本,请求一次密码(通过ssh askpass)(底部是我的readpass函数。它工作正常。)我可以通过该键读取keepass,等等,一切都很好 但是,当我尝试使用ssh连接到手机时,如果没有再次提示我输入密钥的密码,我似乎无

好的,这就是我要做的。我正在编写一个程序,从我的手机中检索keepass数据库(通过ssh),并在其中搜索我感兴趣的任何密码。我想对keepass数据库使用与检索keepass数据库所用的ssh密钥相同的密码,但我不想输入两次密码。所以下面是我的想法:我将编写一个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代理添加密钥?(因为我刚刚从下面的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”);