默认情况下,EC2 实例配置为通过公钥/私钥提供 SSH 身份验证。因此,就像您需要在本地计算机上安装私钥(您可能在创建 IAM 密钥对时下载了 .pem 文件)以通过 SSH 连接到实例一样,您还需要在实例上安装私钥以从那个实例通过 SSH 连接到另一个实例。
您在后台没有看到的是,当您启动实例并指定密钥对名称时,EC2 让您下载私钥(.pem 文件),自动在实例上创建用户(例如在Ubuntu AMI,用户名是“ubuntu”,在 Amazon Linux AMI 上,用户名是“ec2-user”)并将与私钥匹配的公钥放入 ~/.ssh/authorized_keys 文件中。在您可以通过 SSH 连接到实例之前,所有这些都需要完成。
所以,假设您使用相同的密钥对启动了两个实例,为了从实例 A 到实例 B 的 SSH,除了将私钥(.pem 文件)放入 ~/. ssh 目录。 AWS 认为将私有密钥保留在实例上存在安全风险,因此不会自动执行此操作。因此,只需将私钥放入实例 A 的 .ssh 目录中,然后将其添加到您的密钥环中,或者您可以像这样在 ssh 命令中指定密钥:
ssh -i ~/.ssh/PRIVATE_KEY.pem USERNAME@INSTANCE_B_LOCAL_IP
话虽如此,在 EC2 实例上保留其他实例的私钥通常不是一个好主意,如果您发现自己需要这样做,您可能应该重新考虑您的架构,无论您正在做什么(即可能有更好的方法)。
此外,您真的不应该将 EC2 创建的用户帐户(即 ubuntu@ 或 ec2-user@)用于日常工作,甚至执行维护或其他系统管理员工作。您应该真正创建自己的帐户,因为 EC2 创建的帐户本质上是一个根帐户。
AWS 建议继续对所有账户使用公钥/私钥身份验证,但是您可以切换到使用基于密码的身份验证,然后无需担心密钥。这本质上不如使用基于密钥的身份验证安全,但是考虑到严格的密码要求,您可以提高安全性。
在创建其他帐户(基于密码或基于密钥)时,您唯一需要做的就是确保您的个性化帐户具有 sudo 访问权限,以便您可以 sudo 执行需要 root 访问权限的事情。在 Ubuntu 中,您可以通过在 /etc/sudoers.d/90-cloud-init-users 文件中添加以下行来做到这一点:
USERNAME ALL=(ALL) NOPASSWD:ALL
当您在那里时,请考虑为 EC2 创建的用户名禁用 sudo 访问。即使没有其他人拥有密钥,但每个人都会知道有一个具有 sudo 访问权限的 ubuntu 帐户。就像密码一样,知道用户名是黑客工作的重要组成部分。
希望这会有所帮助。