学习AWS EC2 的第一件事情一般都是创建一个新的实例,然后最后他会要求用户创建一个Key Pair,然后通过这个Key Pair来进行SSH的连接。

AWS Key Pair 和EC2

他的本质其实是创建了一个公钥/私钥对之后,把公钥保留在EC2的实例上,然后用户下载私钥。系统创建的Key Pair 我们可以在EC2旁边的Key Pairs 里面找到。

AWS Key Pair 和EC2

我们也可以自己创建之后,手动上传Public Key的 BASE64 的内容。手动创建的话 Linux/OSX 可以直接用 openssl-gen rsa 2048 的命令,Windows可以用 PuttyGen的工具。

AWS Key Pair 和EC2

下面我们看看一个有趣的例子。如果我们SSH进入一个现有的EC2 环境中,手动又添加了一个公钥的信息,会发生什么。

首先连接一个当前的EC2 实例, 这里我是用的Windows Subsystem for Linux, 所以需要加sudo执行

AWS Key Pair 和EC2

SSH进入之后,进入 .ssh的隐藏目录,我们的公钥文件就保存在authorized_keys里面

AWS Key Pair 和EC2

另外一种方式查看我们的公钥信息可以通过AWS EC2的meta data进行查询。所有的metadata 都保留在 http://169.254.169.254/latest/meta-data 里面。可以看见他后面还有各种各样的目录保存相关信息。

AWS Key Pair 和EC2

我们可以一层一层的找下去,如果忘记名字,他会提示有哪些可选项,最后找到我们的公钥信息,和上面的文本内容是一致的。
AWS Key Pair 和EC2

接下来,创建一个公钥/私钥对,可以通过 ssh-keygen这个命令来创建

AWS Key Pair 和EC2

之后,我们把公钥的内容添加到已有的authorization_keys 文件里面。 可以看见,他现在有两个公钥的信息了,一个是通过AWS创建的,一个是我刚刚手动创建的
AWS Key Pair 和EC2

我再创建一个新的S3 Bucket,把我的私钥拷贝进去
AWS Key Pair 和EC2

下载这个私钥到我的电脑上,然后再尝试通过这个私钥连接我的EC2,成功!!

AWS Key Pair 和EC2

接下来我们试试删除掉我们在EC2 KeyPairs里面的公钥,看看会发生什么

AWS Key Pair 和EC2

结果是毫不受影响,我仍然可以通过我的私钥进行SSH连接

AWS Key Pair 和EC2

因为我的公钥信息仍然在那里没有受到任何影响
AWS Key Pair 和EC2

metadata也不受影响

AWS Key Pair 和EC2

最后看看,如果说,我不小心丢失了我的私钥,那我该如何访问我的EC2 实例? 答案是创建一个镜像,然后重新生成一个EC2。下面看看如何操作。

首先创建一个镜像
AWS Key Pair 和EC2

接下来通过这个镜像我们再创建一个同样的EC2,创建的最后,他会提示我们创建新的Key Pairs

AWS Key Pair 和EC2

我们有2个实例了
AWS Key Pair 和EC2

然后通过新的Key 我们可以SSH到这个新的EC2实例中。

AWS Key Pair 和EC2

然后查看一下我们的authorization_keys 文件。 当当!我们可以看见,新的公钥信息并没有覆盖之前的信息,他只是继续添加内容而已。

AWS Key Pair 和EC2

安全起见,我们应该删掉之前的公钥信息
AWS Key Pair 和EC2