2

因此,我可以访问许多 EC2 实例,其中一些已经运行多年。我们有所有这些私钥的特殊存储库;因此,对于我们的大多数实例,我可以以 root(或某些情况下的“ubuntu”用户)身份进入它们来管理它们。

在玩 boto 时,我注意到 EC2 的 .get_keypair() 和 get_all_keypairs 方法,想知道这是否可以用来恢复任何 SSH 密钥,这些密钥已经从我们的程序的裂缝中溜走并丢失了。

但是,当我检查生成的 boto.ec2.keypair.KeyPair 对象时,我看到 .material 属性似乎是空的,当我尝试使用密钥对的 .save() 方法时,我收到一个异常,抱怨材料没有t 被取走。

(其他操作,例如 .get_all_instances() 和 .run_instances() 在该会话期间工作)。

那么,我错过了什么?是否有一些其他操作需要我提供 X.509 证书。除了我的普通 AWS 密钥/密钥对之外?

(注意:我实际上还不需要这个。我只是让自己熟悉 API 并为这种可能性做准备)。

4

1 回答 1

4

不可能像这样恢复 SSH 密钥,get_all_key_pairs()方法名称在这方面有点误导,尽管至少通过类boto.ec2.keypair.KeyPair的返回对象正确记录,参见例如save ()方法:

将新创建的 KeyPair的材料(未加密的 PEM 编码的 RSA 私钥)保存 到本地文件。[强调我的]

这不是boto的限制,而是Amazon EC2的安全架构的结果:在初始创建密钥对的过程中,您只能检索完整的密钥对(即包括私钥),私钥永远不会被存储EC2 并且无法恢复,如果您曾经松开它(但请参阅下面的解决方法)。

Eric Hammond 最近对删除 ec2 实例上的已删除密钥对的相关问题后果的回答为该主题提供了另一个角度,包括指向他的文章Fixing Files on the Root EBS Volume of an EC2 Instance的指针,解释了如何访问该实例无论如何最终。

鉴于您的一些实例已经运行多年,但这可能无法正常工作,因为 此过程仅适用于 EBS 启动实例(当时尚不可用),并且正如 Eric 强调的那样,它也是其中之一您现在应该在 Amazon EC2 上使用 EBS 引导实例的众多原因。

于 2012-05-13T09:50:14.307 回答