17

ssh-add -l显示我有 3 个 RSA 密钥添加到我的 SSH 代理。

ssh-add -L显示那些公钥。

我如何获得私钥,以便我可以将它们保存到文件中?还是设计使这是不可能的?那么它是如何工作的呢?

可以要求 ssh-agent 使用私钥进行操作吗?我如何要求它为我加密/解密一个数字?

我必须为此编写代码没关系(编程语言无关紧要),但我更喜欢使用现有的工具或库。

4

4 回答 4

12

无法使用 ssh 和 ssh-agent 之间的协议获取私钥或执行加密,但可以通过转储 ssh-agent 的内存来获取私钥。在 Linux 上,您必须是 root 才能进行内存转储。

我刚刚找到了一个关于 ssh-agent 如何工作的很好的解释:http ://www.unixwiz.net/techtips/ssh-agent-forwarding.html 。这部分回答了我的一些问题。

  • 代理的一个更聪明的方面是它如何在不向任何人透露该私钥的情况下验证用户的身份(或更准确地说,拥有私钥)。

  • 代理转发的安全优势之一是用户的私钥永远不会出现在远程系统或网络上,即使是加密形式。

因此,SSH 客户端和 ssh-agent 之间的协议无法在 SSH1 或 SSH2 中从 ssh-agent 中获取私钥。

但是,作为 root,您可以获得 ssh-agent 的内存转储,并尝试从那里提取私钥。https://blog.netspi.com/stealing-unencrypted-ssh-agent-keys-from-memory正是这样做的,该页面的评论部分还提到了其他软件。但是,该页面上的软件在 Debian buster 上对我不起作用:即使ssh-add -l显示了 RSA 密钥,内存转储也不包含任何密钥。

于 2010-06-04T18:26:56.737 回答
1

就我而言,我不小心删除了 .ssh 文件夹,但我的密钥已加载。但是由于我无法从 ssh-add 中恢复它们,所以我不得不使用文件恢复软件。

于 2018-02-19T16:30:27.340 回答
1

如果在 Windows 10 上,显然这篇博文中描述的方法在 2018 年有效。作者链接到 github 上的概念验证代码:

tl;博士

私钥受 DPAPI 保护并存储在 HKCU 注册表配置单元中。我在这里发布了一些 PoC 代码来从注册表中提取和重建 RSA 私钥

于 2021-05-13T17:35:02.167 回答
-6

你可能不需要。很可能您只需要一个公钥:

ssh-add -L > ~/.ssh/id_rsa.pub
于 2019-02-05T03:48:07.847 回答