gpt4 book ai didi

perl - 从 perl 中向 SSH-Agent 添加 key

转载 作者:行者123 更新时间:2023-12-04 18:33:46 27 4
gpt4 key购买 nike

好的,这就是我正在尝试做的事情。我正在编写一个程序,它将从我的手机中检索一个 keepass 数据库(通过 ssh)并在其中搜索我感兴趣的任何密码。我想对 keepass 数据库使用与 ssh-key 相同的密码我已 检索 keepass 数据库,但我不想输入密码两次。所以。这就是我的想法:我将编写一个 perl 脚本,要求输入一次密码(通过 ssh-askpass)(这是我底部的 readpass 函数。它工作正常。)我可以通过该 key 等读取 keepass,一切都很好。

但是,当我尝试通过 ssh 连接到手机时,如果 ssh-add 不提示我输入 key 的密码,我似乎无法弄清楚如何添加它。再次

我尝试制作一个简单地回显环境变量的 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 添加 key ? (因为我刚刚从下面的 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);
}

最佳答案

阅读 ssh-add 手册页后,我发现分离终端有效:

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

关于perl - 从 perl 中向 SSH-Agent 添加 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14108447/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com