boto .get_all_keypairs()方法和结果的.save()

时间:2012-05-13 05:59:43

标签: amazon-ec2 boto

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

在玩boto的时候,我注意到了EC2 .get_keypair()和get_all_keypairs方法,并且想知道这是否可以用来恢复任何漏掉了我们程序的破解的SSH密钥。

当我检查导致boto.ec2.keypair.KeyPair对象,但是,我看到。材料属性似乎是空的,当我尝试使用密钥对的.save()方法,我得到一个异常抱怨材料尚未被提取。

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

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

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

1 个答案:

答案 0 :(得分:4)

无法像这样恢复SSH密钥,get_all_key_pairs()方法名称在这方面有点误导,尽管至少通过类boto.ec2.keypair.KeyPair的返回对象进行了适当的记录,请参阅例如save()方法:

  

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

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

Eric Hammond最近对相关问题consequences of deleted key pair on ec2 instance的回答为这个主题提供了另一个角度,包括指向他的文章Fixing Files on the Root EBS Volume of an EC2 Instance的指针,解释了如何最终获得对实例的访问权。

鉴于你的一些实例已运行多年,但这可能不起作用,只要这个过程只适用于EBS启动实例(它没有当时可用,并且,正如埃里克所强调的那样,是You Should Use EBS Boot Instances on Amazon EC2现在的众多原因之一。