我使用的是 Mac (OSX)。
我不小心删除了 ssh 密钥,但我尚未重新启动计算机,因此我仍然可以使用密钥访问服务器。我猜 ssh-agent 在内存中有某种形式的东西?
有什么方法可以从 ssh-agent 检索密钥吗?我还记得密码等。
答案1
取决于你有多少时间。如果您了解 C,那么最安全的方法是使用 gdb 连接到 ssh-agent 进程(必须是 root)并打印密钥数据。身份密钥存储在名为 idtable 的数组中,其中包含身份的链接列表。因此,您可以打印 BIGNUM 数据(如 (1) 中定义),如下所示:
(gdb) call BN_bn2hex(idtable[2]->idlist->tqh_first->key->rsa->n)
其中数字 2 是版本(您可能需要 2),最后一个元素是 BIGNUM 之一(其余的是 engine、e、d、p、q、dmp1、dmq1、iqmp)。
现在要使用此数据,您需要编写一个小型实用程序,在其中定义 RSA 结构(如 (1) 中定义)并填充它们。也许您可以编写另一个实用程序来自动执行此操作,但是您需要更多时间,您可以手动打印数据。然后,您使用上述 RSA 数据调用 PEM_write_RSAPrivateKey (2) 函数,您将获得一个新的未加密的rsa 文件。
抱歉没有提供更多详细信息,但如果您有时间,这可能是一个起点。
(1)/usr/include/openssl/rsa.h
(2) 请参阅 pem(3) 的手册页
答案2
不,无法获取存储在 中的私钥ssh-agent
,因为这违反了代理的目的。我建议您按照评论提示创建新的。
在 Mac 上,有一些回程机器可以为您提供备份,不是吗?或者说你是怎么删除它们的?垃圾桶里什么都没有?