我们有许多不同的系统,由几个人管理。我们选择使用 SSH 公钥身份验证来访问这些系统。这非常有效,因为无需管理或共享管理帐户密码,无需记住各个系统的密码(只需记住私钥的密码),无需与每个远程命令交互(输入密码)。
问题是,安装在系统上的公钥需要以某种方式进行管理。人员来来去去,密钥可能会被泄露,职责也会发生变化(今天被授权进入一个系统的人明天可能会被授权访问另一个系统)。目前,我们通过手动编辑每个需要它的帐户上的 ~/.ssh/authorized_keys 文件来管理它,但这需要大量工作并且容易出错。
在这种情况下,是否有现成的工具来管理公钥?您有自己的解决方案吗?或者以这种方式管理系统的整个想法是有缺陷的?
答案1
正如 pulegium 所提到的,任何通用配置管理软件,如木偶,厨师,乙型肝炎病毒或者CF引擎可以完成任务。
自授权密钥文件并不复杂,你也可以使用同步或者类似 (D)SCMgit或者汞管理此文件。您的其中一台服务器上有“主”文件,并通过 rsync/git/hg/… 提供该文件。在其他每台服务器上,您运行一个 cron 作业,定期检索主副本(如果已更改)并将其复制到正确的本地位置。哎呀,这甚至可以与纯 HTTP 或 FTP 一起使用。
底线是:拥有您 authorized_keys 文件的一个“主”副本并更新它。让“客户端”(应该拥有当前 authorized_keys 文件的计算机)从您的主服务器获取它并在本地部署它。
答案2
OpenSSH 有一个补丁,允许它使用来自 LDAP 服务器的公钥,但这只有在您的 auth/account 检查也针对该 LDAP 服务器进行时才有意义(我的环境就是这样设置的)。而且它的安全性仅取决于您的 LDAP 配置(因此您需要使用 SSL 和验证密钥)。
看http://code.google.com/p/openssh-lpk/了解补丁和更多详细信息。我不知道任何操作系统默认附带此补丁,但如果您运行的是 FreeBSD,并且使用来自 ports 的 OpenSSH,则这是一个可选补丁。
答案3
我运行了一个非常简单的解决方案,它与防火墙规则相同
示例文件 hosts.conf:
192.168.0.1
192.168.2.99
192.168.2.100
分发.sh:
#!/bin/bash
for d in `cat ./hosts.conf`; do
echo "copying to $d ...";
scp /root/.ssh./authorized_keys root@$d:/root/.ssh./authorized_keys
done;
这就是全部的魔法 :-)
答案4
我不确定你说的“很多”是什么意思,也不知道你是否愿意改变,但 Kerberos 就是你要找的机器人。它可以优雅地解决你的问题,并能对人和机器进行身份验证。