代码之家  ›  专栏  ›  技术社区  ›  pts

如何从ssh代理提取私钥?

  •  13
  • pts  · 技术社区  · 14 年前

    ssh-add -l 显示我的ssh代理中添加了3个rsa密钥。

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

    如何获取私钥,以便将它们保存到文件中?或者是故意认为这是不可能的?那它是怎么工作的?

    可以要求ssh代理使用私钥进行操作吗?我怎样才能让它为我加密/解密一个号码?

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

    3 回复  |  直到 6 年前
        1
  •  6
  •   pts    6 年前

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

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

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

    • 代理转发的一个安全好处是,用户的私钥从未出现在远程系统或网络上,即使是以加密的形式出现。

    因此,ssh客户机和ssh代理之间的协议没有为ssh1或ssh2提供从ssh代理中获取私钥的方法。

    但是,作为根用户,您可以获得ssh代理的内存转储,并尝试从中提取私钥。 https://blog.netspi.com/stealing-unencrypted-ssh-agent-keys-from-memory 确实如此,在该页面的注释部分还提到了其他软件。然而,在Debian Buster上,那个页面上的软件对我不起作用:内存转储不包含任何键,尽管如此 ssh-add -l 显示了一个RSA密钥。

        2
  •  1
  •   Zelocox    7 年前

    在我的例子中,我不小心删除了.ssh文件夹,但是我的密钥被加载了。但由于我无法从ssh中恢复这些内容,所以我不得不使用文件恢复软件。

        3
  •  0
  •   Vanuan tacaswell    6 年前

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

    ssh-add -L > ~/.ssh/id_rsa.pub
    
    推荐文章