我们有许多不同的系统,由几个人管理。我们选择使用 SSH 公钥身份验证来访问这些系统。这很好用,因为不需要管理或共享管理帐户密码,不需要记住各种系统的密码(只有私钥的密码),不需要与每个远程命令交互(输入密码) .
问题是,安装在系统上的公钥需要以某种方式进行管理。人们来来去去,密钥可能会被泄露,职责会发生变化(今天被授权进入一个系统的人明天可能被授权访问另一个系统)。目前,我们通过在每个需要它的帐户上手动编辑 ~/.ssh/authorized_keys 文件来管理它,但这需要大量工作并且容易出错。
在这种情况下是否有任何现成的工具来管理公钥?你有自己的解决方案吗?还是以这种方式管理系统的整个想法有缺陷?
正如 pulegium 已经提到的,任何通用的配置管理软件,如Puppet、Chef、Bcfg2或cfengine都可以完成这项任务。
由于authorized_keys文件并不复杂,您还可以使用rsync或git或hg之类的 (D)SCM来管理此文件。您在其中一台服务器上有“主”文件,并通过 rsync/git/hg/... 提供服务。在每台其他服务器上,您运行一个 cron 作业,该作业定期检索主副本(如果已更改)并将其复制到正确的本地位置。哎呀,这甚至可以与纯 HTTP 或 FTP 一起使用。
底线是:拥有您的 authorized_keys 文件的“主”副本并更新它。让“客户端”(计算机,应该有当前的 authorized_keys 文件)从您的主服务器获取它并在本地部署它。
有一个可用于 OpenSSH 的补丁,允许它使用来自 LDAP 服务器的公钥,但这只有在您的身份验证/帐户检查也针对该 LDAP 服务器(这是我的环境设置方式)进行时才真正有意义。此外,它仅与您的 LDAP 配置一样安全(因此您希望使用 SSL 和验证密钥)。
有关补丁和更多详细信息,请参阅http://code.google.com/p/openssh-lpk/。我不知道默认情况下附带此补丁的任何操作系统,但如果您正在运行 FreeBSD,如果您从端口使用 OpenSSH,它是一个可选补丁。
我运行了一个非常简单的解决方案,它与防火墙规则一样
示例文件 hosts.conf:
分发.sh:
这就是全部的魔力:-)
我目前正在检查SSH KeyDB。它的目的就是要做到这一点,管理角色、服务器和用户,分发用户密钥,收集主机密钥等。它甚至有一些叫做“位置”的东西。
我还没有完全解决,我不确定它是否完全有效。然而,该代码是在 python 中的,并且似乎相当易于管理,因此将其掸掉并使其正常工作应该不会太难。
我不确定你所说的许多是什么意思,也不知道你是否愿意改变,但 Kerberos 是你正在寻找的机器人。这将优雅地解决您的问题,并将验证人和机器。
您有两个(通常会变成 3 个)要解决的不同问题:
公钥身份验证有时是一种不错的身份验证方式,但根本不解决授权问题。我不喜欢公钥认证,因为它很容易妥协(尤其是在内部),除非你有一些好的控制。
这就是像 Kerberos 这样的解决方案发挥作用的地方。在 Windows 世界中,Active Directory 解决了这个问题。在 Unix 世界中,有很多选择,这既是好事也是坏事。
我会查看 Red Hat FreeIPA项目,它是一个软件捆绑包,可以轻松启动并快速运行类似 AD 的 Kerberos/LDAP/DNS 系统。
您可以将Bcfg2与bcfg2-accounts一起使用来分发
authorized_keys
. 作为额外的奖励,您将能够控制用户和组。/etc/ssh/ssh_known_hosts
Bcfg2 还支持使用SSHbase进行无痛维护 。还有SKM