忘记了我的 (gnome) SSH 代理中加​​密的 SSH 密钥的密码。如何提取未加密的版本?

忘记了我的 (gnome) SSH 代理中加​​密的 SSH 密钥的密码。如何提取未加密的版本?

好的,我有一个加密的 ssh 私钥,可用于访问服务器。我的 Ubuntu GNOME 桌面有一个集成的图形 ssh 代理(seahorse v3.2.2)。该 ssh 密钥位于此 ssh 代理中,当我登录桌面时会自动解锁。我可以顺利 ssh 进入服务器(使用该加密的 ssh 私钥),而无需输入任何内容。

但是我忘记了这个 ssh 密钥的密码。

有没有办法(从 ssh 代理)提取未加密的 ssh 私钥?由于我能够输入任何内容登录服务器,因此我的计算机上的某些东西显然可以访问此密钥的未加密版本,所以我应该可以提取未加密版本,不是吗?

答案1

根据设计,您不能这样做。密码短语的整个想法是保护敏感密码不被访问磁盘的人窥探。

答案2

我认为您的 ssh 密钥的密码在您的 gnome-keyring 中。可以帮助您提取它。

答案3

我不确定我是否正确理解了你的问题:

我不明白为什么远程服务器会“使用这个加密的 ssh 私钥”,您说的好像它和您桌面上的加密私钥一样?为什么?

如果我省略此短语(并且远程服务器仅在远程登录的相关authorized_keys文件中拥有您的公钥),那么:

  • 你(据称)忘记了本地私钥的密码
  • 您有一个在启动时启动的代理,它会自动授予您访问密钥的权限(即,当您通过 ssh 连接到远程服务器时,它可以使用它来授予访问权限,而远程服务器本身可能拥有您的公钥)。因此,代理知道密码并可以解密您的本地私钥。

    • 您确定私钥已加密吗?(您可以停止代理并尝试:

      ssh -i /path/to/theprivatekey remoteuser@remoteserver

    • 如果密钥确实已加密:启动时运行的代理显然有办法提供其密码。我不知道那个代理,但也许是通过配置文件(我希望不是),也许是通过其他机制(本身可能有另一种保存私人密码的加密?以某种方式保护,也许通过您自己的登录凭据?)。但是:一旦加载并使用它(即,至少在访问远程 ssh 服务器时),它会在内存中有一个未加密的私有 ssh 密钥。此时,如果您具有通过访问 RAM 对本地计算机的 root 访问权限,则您可以读取它(但您必须找到如何以及在何处查找)。

希望这会有所帮助(并且请澄清问题中模糊的部分或纠正我的假设!)

编辑:另一个选项,而且更简单:该代理授予您访问权限:使用它来重新创建一对新的私钥/公钥,并将该新公钥(采用适当的格式!取决于远程 sshd 服务器的类型!)放在 remoteuser@remoteserver 的 authorized_keys 文件中。除了当前的(您的代理正在使用的)。这样您就可以随时使用代理,也可以使用新的(本地)私有(远程)公钥对。(阅读有关 ssh 以及如何创建这些密钥以及如何处理公钥(即,将其放在您需要登录的地方)和私钥(即:保持安全,只有您自己可以看见,即使使用密码加密也不能让全世界读取)。

相关内容