管理 SSH 密钥的建议

管理 SSH 密钥的建议

您发现管理大量 SSH 密钥对的最佳实践是什么?

我使用 SSH 连接多个系统,包括家庭和工作系统。目前,我拥有一个相当小且易于管理的密钥对集合,用于工作和家庭系统。我有一个脚本可以生成命名密钥对,这样我就可以避免混淆。

我的家庭网络由我的笔记本电脑 (ubuntu)、两台台式机(ubuntu/fedora 双启动、fedora/windows 双启动)和一个媒体系统 (ubuntu) 组成。在工作中,我有我的个人笔记本电脑(用于在家工作)、我的台式机 (fedora)、生产系统 (RHEL) 以及一台带 Windows 的笔记本电脑(叹气)和虚拟机 (fedora)。到目前为止一切都很好。

(我没有兴趣将我的家庭密钥对放在我的工作系统上,或者将我的工作密钥对放在我的家庭系统上。我们有虚拟用户帐户来机械化与其他系统的文件传输,其中私钥必须驻留在生产计算机上,在其他系统之间传输文件。)

但现在出现了 Hadoop,这是一个由 100 多个系统组成的大型集群,并且更加复杂、更多的用户和更多的密钥对。现在我需要管理密钥。

(我需要澄清一下。我是一名软件开发人员,为正在部署 Hadoop 集群的客户提供咨询服务。他们需要管理密钥。会有很多人访问集群,需要将他们的公钥放到系统上。作为居民Linux 专家,他们向我寻求帮助,我建议雇用一名系统管理员,但在他们这样做之前,我会提供帮助)

当我需要将公钥发布到远程系统时,所有“操作方法”网页都建议覆盖 (>)(销毁现有密钥)或追加 (>>)(这很好,保留现有密钥) 。但我认为单独保存目标计算机上的每个公钥,然后将它们组合起来会更好。我正在寻求建议。

您发现管理大量密钥的最佳实践是什么?

谢谢你!


编辑:一方面需要在许多系统上放置密钥,并为特定用户进行相应的 CRUD(创建、读取、更新、删除/禁用),这意味着需要能够识别哪些密钥属于哪些用户。

答案1

一般来说,每台客户端计算机不应拥有超过 1 个密钥(强调“一般”)。我不确定我是否正确理解你的问题,但如果你说每个远程系统都有一个单独的密钥,那么你肯定做错了。

SSH 使用公钥加密技术。您在远程系统上安装的密钥是公钥,在其他地方重复使用该密钥绝对没有坏处。这是必须受到保护并保留在您的个人系统上的私钥。

将私钥仅驻留在一个客户端上而不是共享也是一个好主意。这样,如果客户端受到威胁,您可以仅撤销该密钥。


现在,如果您问如何将公钥发送到数百个系统,有几种方法可以做到这一点。

最常见的方法是使用共享主目录。为所有系统安装(或自动安装)NFS(或其他网络文件系统)。

另一种方法是利用 ssh 中的新功能。这是一个名为 的配置指令AuthorizedKeysCommand。基本上,这是 sshd 每次需要查找公钥时都会运行的命令。该命令只是将正在查询的用户的公钥写入其 STDOUT。这主要在您没有安装主目录但仍然有中央身份验证服务器时使用(自由IPA利用了这一点)。

当然,您可以执行其他操作,例如/home从中央服务器进行 cron 作业 rsync。但这并不常见。

答案2

当我需要将公钥发布到远程系统时,所有“操作方法”网页都建议覆盖 (>)(销毁现有密钥)或追加 (>>)(这很好,保留现有密钥) 。但我认为单独保存目标计算机上的每个公钥,然后将它们组合起来会更好。我正在寻求建议。a

我没有看到存储公钥有任何优势两个都.ssh/authorized_keys并在一个单独的文件中。

如果您查看存储在 *authorized_keys* 文件中的实际密钥,您会发现它们已经包含有关密钥来源的人类可读的元信息。例如,公钥user@foo通常具有如下条目:

ssh-rsa AAAAB3Nza...LiPk== [email protected]

因此,可以非常轻松地从 *authorized_keys* 文件中检查/提取/删除某些密钥(附加到某些用户)。

用户 ID 实际上是一个自由格式的“注释”字段,因此您可以在其中放置您认为识别给定密钥所必需的任何信息。

无论如何,您应该只为需要访问远程资源的“用户”生成密钥对。您很可能不需要从每个 hadoop 主机登录到每个其他 hadoop 主机。相反,您将拥有一些需要访问所有 hadoop 主机的管理计算机。每台管理机器只需要一个密钥对,并在所有 hadoop 主机上安装每个公钥。

答案3

最近的 OpenSSH 允许从 LDAP 获取 ssh 密钥,请参阅中的“AuthorizedKeysCommand”sshd_配置手册页。就我个人而言,我更喜欢 OpenSSH 证书,而不是密钥,请参阅http://blog.habets.pp.se/2011/07/OpenSSH-certificates。您可以使用任何配置管理器(例如 cfengine、puppet、chef、salt...)来管理密钥

答案4

另一种非常容易实现并且在添加多个用户方面具有更大灵活性的方法是使用。 https://userify.com/

它允许您定义不同的服务器组,并为这些服务器启用或禁用不同用户的密钥。

超级简单的安装和管理。

相关内容