我们有许多不同的系统,由几个人pipe理。 我们select使用SSH公钥authentication来访问这些系统。 这样做效果很好,因为不需要pipe理或共享pipe理帐户密码,也不需要记住各个系统的密码(只有密码到您的私钥),不需要与每个远程命令交互(input密码) 。
问题是,安装在系统上的公钥需要以某种方式进行pipe理。 人们来来去去,钥匙可能会受到损害,责任也在改变(今天有权进入一个系统的人可能被授权明天访问另一个系统)。 目前我们通过手动编辑〜/ .ssh / authorized_keys文件来pipe理每一个需要这个文件的帐号,但是这样做很多工作,容易出错。
在这种情况下是否有任何现成的工具来pipe理公钥? 你有自己的解决scheme吗? 或者,这种pipe理系统的想法有缺陷吗?
正如pulegium所提到的,像Puppet , Chef , Bcfg2或cfengine这样的通用configurationpipe理软件可以完成这个任务。
由于authorized_keys文件并不那么复杂,您也可以使用rsync或(D)SCM(如git或hg)来pipe理此文件。 你有一个服务器上的“主”文件,并通过rsync / git / hg / …来提供服务。 在其他所有服务器上运行定期检索主副本(如果已更改)的cron作业并将其复制到正确的本地位置。 哎呀,这甚至可以用纯HTTP或FTP工作。
底线是:拥有您的authorized_keys文件的一个“主”副本并更新它。 让“客户端”(计算机应具有当前的authorized_keys文件)从主服务器获取并在本地部署。
有一个可用于OpenSSH的补丁程序,允许它使用来自LDAP服务器的公共密钥,但是如果您的身份validation/帐户检查也是针对该LDAP服务器(这是我的环境的设置)进行的,那么这样做才有意义。 此外,它只与您的LDAPconfiguration一样安全(所以您希望使用SSL和validation密钥)。
请参阅http://code.google.com/p/openssh-lpk/获取补丁和更多详细信息。 我不知道默认情况下带有这个补丁的任何操作系统,但是如果你运行的是FreeBSD,如果你使用OpenSSH的话,它是一个可选的补丁。
我运行一个非常简单的解决scheme,这与防火墙规则相同
示例文件hosts.conf:
192.168.0.1 192.168.2.99 192.168.2.100
distribute.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;
多数民众赞成在整个魔术:-)
我目前正在检查SSH KeyDB 。 这意味着要做到这一点,pipe理angular色,服务器和用户,分配用户密钥,收集主机密钥等,甚至有所谓的“地点”。
我还没有完成全部工作,我不知道它是否完全正常工作。 代码是在Python中,但似乎是相当易于pipe理的,所以不应该太难以清除它并使其工作。
我不确定你的意思是什么,也不知道你是否愿意改变,但Kerberos是你正在寻找的机器人。 这将优雅地解决您的问题,并将authentication人员和机器。
你有两个(通常会变成3)你试图解决的不同问题:
公共密钥身份validation有时可以进行身份validation,但根本不涉及授权。 我不喜欢公开密钥authentication,因为除非你有一些好的控制,否则很容易妥协(特别是内部)。
这就是Kerberos这样的解决scheme。 在Windows世界中,Active Directory解决了这个问题。 在Unix世界里,有很多select,这既是好事,也是坏事。
我会看看红帽FreeIPA项目,这是一个软件包,可以很容易地获得一个类似AD的Kerberos / LDAP / DNS系统,并且可以快速运行。
您可以使用bcfg2与bcfg2帐户分发authorized_keys 。 作为额外的奖励,您将有能力控制用户和组。
Bcfg2也可以使用SSHbase对/etc/ssh/ssh_known_hosts进行无痛维护。
还有SKM