删除了我的 ssh 密钥

Jam*_*mes 6 ssh core-dump ssh-agent dump

我在 Mac (OSX) 上。

我不小心删除了我的 ssh 密钥,但我还没有重新启动计算机,所以我仍然可以使用我的密钥访问服务器。我猜 ssh-agent 在内存中有某种形式的它?

有没有办法从 ssh-agent 中检索密钥?我还记得密码等。

nkm*_*kms 7

取决于你有多少时间。如果您知道 C,那么最安全的方法是使用 gdb 连接到 ssh-agent 进程(必须是 root)并打印关键数据。身份密钥存储在一个名为 idtable 的数组中,该数组包含一个身份链接列表。因此,您可以打印 BIGNUM 数据(如 (1) 中所定义),例如:

(gdb) call BN_bn2hex(idtable[2]->idlist->tqh_first->key->rsa->n)
Run Code Online (Sandbox Code Playgroud)

其中数字 2 是版本(您可能需要 2),最后一个元素是 BIGNUM 之一(其余是引擎、e、d、p、q、dmp1、dmq1、iqmp)。

现在要使用这些数据,您需要编写一个小型实用程序,在其中定义 RSA 结构(如 (1) 中定义)并填充它们。可能您可以编写另一个实用程序来自动执行此操作,但是您需要更多时间,您可以手动打印数据。然后你用上面的 RSA 数据调用 PEM_write_RSAPrivateKey (2) 函数,你就有了一个新的未加密的rsa 文件。

抱歉没有更多细节,但如果你有时间,它可以作为一个起点。

(1) /usr/include/openssl/rsa.h

(2) 请参阅 pem(3) 的手册页