使用密钥对限制对用户的访问:.pem 难题

Restricting access to users with keypair: The .pem conundrum

这是我的问题

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

这里是问题开始的地方

我的两个问题如下

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

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

任何 solution/elaborate 的回答都会很有帮助。

尝试一下:
1) 你不能从 authorized_keys 中删除密钥而不失去对服务器的访问权限。那里的 public 密钥向服务器证明你是你在使用 pem 通过 SSH 对服务器进行身份验证时所说的那个人。

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

3) 我会在盒子上创建额外的用户,并通过设置 /home/newusername/.ssh/authorized_keys 来为他们设置无密码登录,这与您为 ubuntu 今天的用户。当他们离开项目时,只需禁用 and/or 删除帐户

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

我建议您阅读 public/private 密钥加密以了解其工作原理。

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

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

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

在大多数情况下,您的问题实际上是关于如何 administrate users and SSH on Ubuntu. The keypair that you generated using the console is only used when the instance first launches. It is always available via instance metadata;您可以通过 运行 EC2 实例上 shell 的以下命令看到:

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

输出:

ssh-rsa ...blah blah blah...

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

关于您的具体问题,

  1. 如果您在控制台上创建的原始 public 密钥仍在 authorized_keys 中,那么拥有相应 PEM 文件的任何人仍然可以登录。要更正此问题,您需要小心从 authorized_keys 文件中删除该密钥(例如,首先 absolutely 确保您可以使用不同的密钥登录)。
  2. 虽然他们可能没有您从 AWS 控制台下载的 PEM 文件,但他们一定以某种方式获得了您添加到 authorized_keys.
  3. 有很多不同的方法。如上所述,更多的是你想如何在Ubuntu下administrate users。由于您似乎想保留对机器的控制权,因此您可以为每个开发人员创建用户帐户以登录,然后在某些情况下授予他们使用 sudo 的有限权限(假设他们完全需要) .然后您可以随时撤销这些帐户。
  4. 我的理解是,有许多不同的方法可以将 PEM 文件的 等价物 提供给 ssh,并且您(和您的开发人员)必须以某种方式这样做。我建议仔细阅读 ssh 文档。

希望对您有所帮助!