无法在同一子网中对 EC2 实例进行 ssh 处理



我在同一子网中有两个EC2实例,但是当我尝试从一个实例ssh到另一个实例时,我收到公钥被拒绝消息,它没有提示密码

[root@ip-10-0-21-156 ~]# ssh testuser@10.0.21.170权限被拒绝(公钥)。

默认情况下,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 帐户。 就像密码一样,知道用户名是黑客工作的重要组成部分。

希望这有帮助。

最新更新