0

这是我的问题

我在 AWS 上有一个运行 Ubuntu Server 的 ec-2 实例。在实例的初始启动期间,我通过转到 AWS 控制台 --> 密钥对 --> 创建密钥对来生成密钥对。它生成了一个密钥 abcxxxx.pem,我已经保存了它。

这是问题开始的地方

  • 我负责一个项目,其中有多个开发人员进进出出。没有太多考虑,我将我的 .pem 文件分发给了 2-3 个开发人员。从那以后他们就离开了这个项目,我想将 AWS 访问权限限制为只有活跃的开发人员。基本上我不希望 2-3 个开发人员(带有 .pem 文件)访问我的机器。

  • 对于所有新开发人员(我不再分发 .pem 文件),我通过将 .pem 文件粘贴到 AWS 机器上来授予访问public key权限/home/ubuntu/.ssh/authorized_keys。这使他们可以访问机器。

我的两个问题如下

  1. 如何限制对已经拥有 .pem 文件的人的访问? 删除他们的公钥/home/ubuntu/.ssh/authorized_keys会有所不同吗?注意:我仍然拥有密钥,并且只有我可以访问 AWS 控制台
  2. 新开发人员如何在没有 .pem 文件的情况下访问 AWS 机器?(我唯一要做的就是将他们的公钥粘贴到 AWS 上的 authorized_keys 中)
  3. 我如何实现一个我拥有唯一访问权限的系统,并与开发人员在项目中开/关打交道?
  4. 公钥在 AWS 机器上的 authorized_keys 中的所有用户(包括我)都可以在没有 .pem 文件的情况下登录。这怎么可能?不是每个人都需要一个 .pem 文件来 ssh 进入吗?

我真的对这个密钥对业务感到困惑(.pem 文件的作用是什么?)和其他在线帖子似乎没有帮助(甚至 AWS 支持)。大多数在线帖子都解决了您丢失密钥并且启动了新实例等的情况。我联系了 AWS 支持,他们刚刚向我发送了这个链接。我不明白这有什么帮助。

任何解决方案/详尽的答案都会非常有帮助。

4

2 回答 2

2

在大多数情况下,您的问题实际上是关于如何在 Ubuntu 上管理用户和 SSH。您使用控制台生成的密钥对仅在实例首次启动时使用。它始终可以通过实例元数据获得;您可以通过在 EC2 实例上的 shell 中运行以下命令来看到这一点:

$ curl http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key

输出:

ssh-rsa ...等等等等

当您的 EC2 实例首次启动时,此密钥已复制到/home/ubuntu/.ssh/authorized_keys其中,因为您使用的 Ubuntu AMI 已设置为执行此操作。但这只是一个约定。这是唯一一次将密钥自动复制到任何地方,因此从那里您可以随心所欲地管理authorized_keys文件。

关于您的具体问题,

  1. 如果您在控制台上创建的原始公钥authorized_keys仍在您可以使用不同的密钥登录)。authorized_keys
  2. 虽然他们可能没有您从 AWS 控制台下载的 PEM 文件,但他们一定以某种方式获得了您添加到authorized_keys.
  3. 有很多不同的方法。如上所述,更多的是您希望如何在 Ubuntu 下管理用户。由于您似乎希望保留对机器的控制权,您可以为每个开发人员创建用户帐户以登录,然后sudo在某些情况下授予他们有限的使用权限(假设他们完全需要)。然后,您可以随时撤销这些帐户。
  4. 我的理解是,有许多不同的方法可以向 ssh 提供等效的 PEM 文件,并且您(和您的开发人员)必须以某种方式这样做。我建议仔细阅读 ssh 文档。

我希望这有帮助!

于 2016-04-12T16:55:54.197 回答
1

对此进行尝试:
1)您无法从authorized_keys中删除密钥而不会失去对服务器的访问权限。当您使用 pem 通过 SSH 对服务器进行身份验证时,那里的公钥向服务器证明您就是您所说的那个人。

2) 对于新开发人员,他们确实在 ssh 到机器时传递了一个密钥。这只是他们的密钥,它是隐式传递的,而不是您用来启动机器的密钥。一旦他们的 ssh 客户端证明它具有与授权文件中的公钥匹配的私钥,他们的公钥在 authorized_keys 中的存在向服务器发出信号,即他们有权访问机器。

3)我会在盒子上创建额外的用户,并通过设置 /home/newusername/.ssh/authorized_keys 来设置它们以进行无密码登录,就像你今天为 ubuntu 用户设置它的方式一样。当他们离开项目时,只需禁用和/或删除帐户

4) 可以在不指定 pem 的情况下登录,但您仍需指定密钥。要查看密钥交换以及如何进行身份验证,请执行“ssh -vvv user@machinename”,您将看到整个 ssh 对话。当您不指定密钥时,ssh 客户端将在几个预定义的位置中查找一个。您将看到客户端尝试使用这些密钥中的每一个(您可能从 ~/.ssh/id_* 中获取了一些东西)。pem 不是魔术文件。它只是密钥(它可能包含公钥、公钥和私钥或公钥和整个证书链)。

我建议您阅读公钥/私钥加密以了解它是如何工作的。

https://en.wikipedia.org/wiki/Public-key_cryptography

https://www.youtube.com/watch?v=svRWcx7dT8g

https://staff.washington.edu/dittrich/misc/ssh/

于 2016-04-12T04:52:19.530 回答