ssh-add -l
显示我有3个RSA密钥添加到我的SSH代理。
ssh-add -L
显示这些公钥。
如何获取私钥,以便将其保存到文件中?或者这是不可能的?它是如何工作的?
是否可以要求ssh-agent使用私钥进行操作?我怎么能让它为我加密/解密一个号码?
我必须为此编写代码(编程语言并不重要),但我更喜欢使用现有工具或库。
答案 0 :(得分:6)
使用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破坏程序上对我不起作用:内存转储不包含任何密钥,即使ssh-add -l
已显示RSA密钥。
答案 1 :(得分:1)
在我的情况下,我不小心删除了.ssh文件夹但我的密钥已加载。但由于我无法从ssh-add恢复,所以我不得不使用文件恢复软件。
答案 2 :(得分:1)
如果在 Windows 10 上,显然 this blog post 中描述的方法在 2018 年有效。作者链接到 github 上的概念验证代码:
<块引用>tl;博士
私钥受 DPAPI 保护并存储在 HKCU 注册表配置单元中。我发布了一些 PoC 代码 here 以从注册表中提取和重建 RSA 私钥
答案 3 :(得分:-1)
您可能不需要。您最有可能只想要一个公共密钥:
ssh-add -L > ~/.ssh/id_rsa.pub