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

时间:2016-04-11 21:47:00

标签: amazon-web-services amazon-ec2 ssh-keys pem key-pair

这是我的问题

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

这是问题开始的地方

  • 我负责一个多个开发人员上下班的项目。没有 太多想了,我把我的.pem文件分发给2-3个开发人员。他们 从那时起就离开了项目,我想将AWS访问限制为仅限活动 开发人员。基本上我不希望2-3个开发人员(使用.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 in?
  5. 我真的很担心这个密钥对业务(.pem文件的作用是什么?)和其他在线帖子似乎没有帮助(甚至AWS支持)。大多数在线帖子都会解决您丢失密钥并启动新实例等的情况。我联系了AWS支持,他们只是发送了link。我不明白这有什么帮助。

    任何解决方案/精心解答的答案都会非常有用。

2 个答案:

答案 0 :(得分:2)

在大多数情况下,您的问题实际上是关于如何在Ubuntu上administrate users和SSH。使用控制台生成的密钥对仅在实例首次启动时使用。始终可以通过instance metadata获取;你可以通过从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,那么拥有相应PEM文件的任何人仍然可以登录。要解决此问题,您需要小心地从{{ {1}}文件(例如,首先使绝对确保您可以使用其他密钥登录)。
  2. 虽然他们可能没有您从AWS控制台下载的PEM文件,但他们必须以某种方式获得您添加到authorized_keys的其中一个公钥的PEM文件(或一些粗略的等效文件)。
  3. 有很多不同的方法。如上所述,更多的是你想在Ubuntu下administrate users的方式。由于您似乎希望保留对计算机的控制权,因此您可以为每个要登录的开发人员创建用户帐户,然后在某些情况下授予他们使用authorized_keys的有限权限(假设他们根本需要) 。然后,您可以随时撤销这些帐户。
  4. 我的理解是,有很多不同的方法可以将sEM文件的等效提供给ssh,不管怎样你(和你的开发人员)必须这样做。我建议仔细阅读ssh文档。
  5. 我希望这有帮助!

答案 1 :(得分:0)

捅了一下:
1)您不能从authorized_keys中删除密钥而不会失去对服务器的访问权限。当你使用pem通过SSH授权服务器时,那里的公钥向服务器证明你就是你所说的那个人。

2)对于新开发人员,当ssh到机器时,他们确实传入了一个密钥。它只是他们的钥匙,而且与您用来旋转机器的钥匙相比,它被隐含地传递出去了。在authorized_keys中它们的公钥的存在向服务器发出信号,一旦它们的ssh客户端证明它具有与授权文件中的公钥匹配的私钥,它们就被授权访问该机器。

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/