使用密钥对限制对用户的访问:.pem 难题
Restricting access to users with keypair: The .pem conundrum
这是我的问题
我在 AWS 运行 Ubuntu 服务器上有一个 ec-2 实例。在实例的初始启动期间,我通过转到 AWS 控制台 --> 密钥对 --> 创建密钥对生成了密钥对。它生成了一个密钥abcxxxx.pem,我已经保存了它。
这里是问题开始的地方
我负责一个项目,多个开发人员来来去去。没有
考虑太多,我将我的 .pem 文件分发给了 2-3 个开发人员。他们
从那以后就离开了这个项目,我想将 AWS 访问权限限制为仅处于活动状态
开发商。基本上我不希望 2-3 名开发人员(带有 .pem 文件)访问我的机器。
对于所有新开发人员(我不再分发 .pem 文件),我通过粘贴来授予对 AWS 机器的访问权限
/home/ubuntu/.ssh/authorized_keys
中有 public key
。这个
授予他们访问机器的权限。
我的两个问题如下
- 如何限制已经拥有 .pem 文件的人的访问权限?
从
/home/ubuntu/.ssh/authorized_keys
中删除他们的 public 密钥会有所不同吗? 注意:我仍然有密钥,只有我可以访问 AWS 控制台。
- 新开发人员如何在没有 .pem 文件的情况下访问 AWS 机器? (我唯一做的就是将他们的 public 密钥粘贴到 AWS 上的 authorized_keys 中)
- 我如何实施一个系统,在这个系统中我有唯一的访问权限,并且我与即将 on/off 参与项目的开发人员打交道?
- 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
在大多数情况下,您的问题实际上是关于如何 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
文件。
关于您的具体问题,
- 如果您在控制台上创建的原始 public 密钥仍在
authorized_keys
中,那么拥有相应 PEM 文件的任何人仍然可以登录。要更正此问题,您需要小心从 authorized_keys
文件中删除该密钥(例如,首先 absolutely 确保您可以使用不同的密钥登录)。
- 虽然他们可能没有您从 AWS 控制台下载的 PEM 文件,但他们一定以某种方式获得了您添加到
authorized_keys
.
- 有很多不同的方法。如上所述,更多的是你想如何在Ubuntu下administrate users。由于您似乎想保留对机器的控制权,因此您可以为每个开发人员创建用户帐户以登录,然后在某些情况下授予他们使用
sudo
的有限权限(假设他们完全需要) .然后您可以随时撤销这些帐户。
- 我的理解是,有许多不同的方法可以将 PEM 文件的 等价物 提供给 ssh,并且您(和您的开发人员)必须以某种方式这样做。我建议仔细阅读 ssh 文档。
希望对您有所帮助!
这是我的问题
我在 AWS 运行 Ubuntu 服务器上有一个 ec-2 实例。在实例的初始启动期间,我通过转到 AWS 控制台 --> 密钥对 --> 创建密钥对生成了密钥对。它生成了一个密钥abcxxxx.pem,我已经保存了它。
这里是问题开始的地方
我负责一个项目,多个开发人员来来去去。没有 考虑太多,我将我的 .pem 文件分发给了 2-3 个开发人员。他们 从那以后就离开了这个项目,我想将 AWS 访问权限限制为仅处于活动状态 开发商。基本上我不希望 2-3 名开发人员(带有 .pem 文件)访问我的机器。
对于所有新开发人员(我不再分发 .pem 文件),我通过粘贴来授予对 AWS 机器的访问权限
/home/ubuntu/.ssh/authorized_keys
中有public key
。这个 授予他们访问机器的权限。
我的两个问题如下
- 如何限制已经拥有 .pem 文件的人的访问权限?
从
/home/ubuntu/.ssh/authorized_keys
中删除他们的 public 密钥会有所不同吗? 注意:我仍然有密钥,只有我可以访问 AWS 控制台。 - 新开发人员如何在没有 .pem 文件的情况下访问 AWS 机器? (我唯一做的就是将他们的 public 密钥粘贴到 AWS 上的 authorized_keys 中)
- 我如何实施一个系统,在这个系统中我有唯一的访问权限,并且我与即将 on/off 参与项目的开发人员打交道?
- 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
在大多数情况下,您的问题实际上是关于如何 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
文件。
关于您的具体问题,
- 如果您在控制台上创建的原始 public 密钥仍在
authorized_keys
中,那么拥有相应 PEM 文件的任何人仍然可以登录。要更正此问题,您需要小心从authorized_keys
文件中删除该密钥(例如,首先 absolutely 确保您可以使用不同的密钥登录)。 - 虽然他们可能没有您从 AWS 控制台下载的 PEM 文件,但他们一定以某种方式获得了您添加到
authorized_keys
. - 有很多不同的方法。如上所述,更多的是你想如何在Ubuntu下administrate users。由于您似乎想保留对机器的控制权,因此您可以为每个开发人员创建用户帐户以登录,然后在某些情况下授予他们使用
sudo
的有限权限(假设他们完全需要) .然后您可以随时撤销这些帐户。 - 我的理解是,有许多不同的方法可以将 PEM 文件的 等价物 提供给 ssh,并且您(和您的开发人员)必须以某种方式这样做。我建议仔细阅读 ssh 文档。
希望对您有所帮助!