管理SSH密钥的建议


13

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

我使用SSH连接到在家和工作中的多个系统。我目前有一个相当小的,可管理的工作和家庭系统密钥对集合。我有一个生成命名密钥对的脚本,因此可以避免混淆。

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

(我对将家庭密钥对放置在工作系统上或将工作密钥对放置在家庭系统上都没有兴趣。而且我们拥有虚拟用户帐户,可以与其他系统机械化文件传输,而其他系统则必须将私钥驻留在生产机器上,在其他系统之间传输文件。)

但是现在出现了Hadoop,它是一个由100多个系统组成的大型集群,具有更高的复杂性,更多的用户和更多的密钥对。现在,我需要管理密钥。

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

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

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

谢谢!


编辑:一方面需要将密钥放置在许多系统上,同时还要为特定用户提供CRUD(创建,读取,更新,删除/禁用),这意味着需要能够识别哪些密钥属于哪些用户。


您是在谈论用户或主机密钥对吗?sshfp通过将公共密钥的签名放入DNS中来解决主机密钥问题。对于用户凭据,您可能需要查看OpenSSH证书,或者使用诸如Spacewalk或puppet之类的东西将所有密钥对保存到中央位置,并根据需要进行部署。听起来您可能想要后者,因为您只是将新服务器设置为客户端,然后部署文件的最新版本。
布莱奇利2013年

我还有另一台笔记本电脑(fedora),可以连接MyBook Live网络磁盘(正在运行linux),有两个内置的台式机正在等待硬盘驱动器,还计划再增加两个笔记本电脑来构建一个家庭hadoop集群(学习)。是的,我需要了解密钥管理。
ChuckCottrill

Answers:


12

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

Ssh使用公钥加密。您在远程系统上安装的密钥是公用密钥,在其他地方重用此密钥绝对没有害处。这是私钥,必须加以保护并保留在您的个人系统上。

将私钥仅驻留在一个客户端上,而不共享,也是一个好主意。这样一来,如果客户端受到攻击,您就只能撤消该键。


现在,如果您要问如何将您的公钥发布到数百个系统中,则有两种方法可以实现。

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

另一种方法是利用ssh中的新功能。这是一个名为的配置指令AuthorizedKeysCommand。基本上,这是一个命令,sshd将在每次需要查找公钥时运行。该命令仅将要查询的用户的公共密钥写入其STDOUT。这主要在您没有挂载主目录但仍具有中央身份验证服务器时使用(FreeIPA充分利用了这一点)。

当然,您可以执行其他操作,例如/home从中央服务器启动cron作业rsync 。但这不是常见的做法。


我家里有8台计算机,云中有可变数量的“服务器”(根据需要缩放)。当我扩展到300个服务器实例时,拥有300个客户端密钥是很愚蠢的。所以我有16个公用密钥(8个主机中的每个2个用户)。对于硬盘,我每三个月按一次键。对于云实例,它们已集成到自定义映像中。
Skaperen

2

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

我没有看到在存储公共密钥的任何优势.ssh/authorized_keys和一个单独的文件。

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

ssh-rsa AAAAB3Nza...LiPk== user@example.net

因此,很容易从* authorized_keys *文件中检查/提取/删除某些键(附加到某些用户)。

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

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


每个用户都会生成自己的密钥,我相信您是在说每个用户应提供username @ hostname作为密钥源的一部分。这意味着要提供一个强制执行username @ hostname的脚本,对吗?
ChuckCottrill 2013年

这取决于他们如何创建密钥;例如ssh-keygen将添加形式的评论user@host; 其他密钥生成器(如腻子附带的密钥生成器)可能不会这样做。但是,是的,创建一个小脚本以确保每个键都有一个标识用户/主机组合的注释字段应该是微不足道的。
umläute


0

使用的另一种超级易实现的方式是增加多个用户,这带来了更多的灵活性。 https://userify.com/

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

超级简单的安装和管理。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.