【问题标题】:Unable to ssh EC2 instances in same subnet无法对同一子网中的 EC2 实例进行 ssh
【发布时间】:2016-06-19 09:11:12
【问题描述】:

我在同一个子网中有两个 EC2 实例,但是当我尝试从一个实例 ssh 到另一个实例时,我收到 publickey denied 消息,它不提示密码

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

【问题讨论】:

  • 您是否已将该服务器上的 ssh 配置为使用密码而不是 ssh 密钥?因为它没有提示输入密码,所以听起来你没有。

标签: amazon-web-services


【解决方案1】:

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

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-19
    • 1970-01-01
    • 2020-04-27
    • 1970-01-01
    • 2017-11-17
    相关资源
    最近更新 更多