在亚马逊EC2实例上生成pem文件

4

我们的生产系统正在运行Amazon EC2实例。

负责这方面工作的同事(假设他叫Joe)已经离开公司了。

现在我们想要访问实例的ssh

他把他的私钥和公钥文件都留给了我们。

id_dsa
id_dsa.pub

在后端,我们可以看到键"joe"被分配给正在运行的实例,并且通过以下命令进行ssh访问:

ssh -i "joe.pem" ec2-user@11.22.11.123

我们如何生成一个.pem文件?或者更一般地说,为了获得ssh访问权限,需要做什么?

我们需要来自亚马逊的证书吗?如果需要,应该怎么做?


1
你不能为已经运行的实例“生成”pem文件。你需要在启动第一个使用它的实例之前生成它,并且只有这一个机会来下载它。如果你失去了它,就没有办法恢复它,必须停止实例,分离根驱动器,添加新密钥,重新连接并重启。否则,这将不是一个很好的安全机制。你是想做这个吗? - Michael - sqlbot
2个回答

21

生成新的Pem密钥:

前往EC2仪表盘>密钥对>创建密钥对

这将为您下载pem密钥文件。

用于SSH访问:

  1. 您可以将id_rsa.pub添加到实例的~/.ssh/auth*文件中。然后,您可以使用ssh ubuntu@ip连接到它
  2. 您可以使用与该实例关联的pem密钥,通过ssh -i "file.pem" ubuntu@ip进行连接

1
很奇怪,我不认为你解释的这么简单。 - Santi
2
我可以下载现有的密钥对吗? - Felix Quehl
3
如何将新的.pem文件附加到现有的EC2实例上@animesh。 - CodePlateau

11

访问新实例

Key Pairs 用于授予使用Amazon提供的标准Amazon Machine Image(AMI)启动的新Amazon EC2实例的访问权限。(来自其他位置的AMI可能有其自己的登录方法。)

当实例启动时,会指定一个密钥对。然后,EC2服务将复制密钥对的公共部分到/home/ec2-user.ssh/authorized_keys(路径可能因所选的AMI而异)。

然后,要连接到实例,请使用密钥对的私有部分,就像您所展示的那样:

ssh -i joe.pem ec2-user@11.22.11.123

Amazon Linux实例使用ec2-user登录。Ubuntu使用ubuntu作为用户名。

要使用的密钥对名称显示在管理控制台中EC2实例的信息部分中:

Key pair in console

一旦访问了实例,建议更改使用的密钥对、创建新用户并通常接管实例的安全性。遵循您组织的标准安全实践,而不是依赖于启动实例时使用的密钥对。

访问现有实例

对于您的特定情况,实例已经启动,并且授予访问权限的ssh密钥对可能(也可能不是!)是第一次启动实例时使用的密钥对。

您还提到了可以看到键joe与该实例相关联。 在这种情况下,您应该尝试找到joe.pem并登录到该实例。 如果找不到该文件,请尝试使用id_dsa文件。

如果所有这些都不起作用,则问题是以下两种情况之一:

  • 您没有使用启动实例时使用的密钥对,或者
  • 实例本身的密钥对已更改(根据安全建议)

底线是,如果没有密钥对,则无法ssh到该实例。

恢复访问权限

最糟糕的情况是,如果您无法ssh到该实例,仍然可以解决问题。 一般步骤如下:

  • 停止实例(我们称其为Instance A)
  • 卸载引导卷(我们称其为Volume A)
  • 启动新实例或选择现有实例(我们称其为Instance B)
  • Volume A附加到Instance B上
  • 登录到Instance B并将新公共密钥对复制到Volume A上的.ssh/authorized_keys文件中
  • 卸载分离Instance B中的Volume A
  • Volume A附加到Instance A上
  • 启动Instance A

现在您应该能够ssh到该实例。

一些参考资料:


1
我忘记给反馈了...上面的逐步说明帮助了我。我成功获取了SSH访问权限。非常感谢。如果有人处于同样的情况,请注意正确的挂载点。挂载点显示在Javascript弹出窗口中。 - Ansgar Helfrich
1
这对我有效。请记得在相同的区域内创建B实例,否则您将无法将A卷附加到B实例。 - Santosh Prasad Sah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接