分配SSH公钥的系统


26

我们有许多不同的系统,这些系统由几个人管理。我们选择使用SSH公钥身份验证来访问这些系统。这非常有效,因为无需管理或共享管理帐户密码,无需记住各种系统的密码(仅需输入私钥的通行短语),无需与每个远程命令进行交互(输入密码) 。

问题是,需要以某种方式管理安装在系统上的公钥。人们来来往往,密钥可能会受到损害,职责会发生变化(今天被授权进入一个系统的人可能会被授权明天访问另一个系统)。目前,我们通过在需要的每个帐户上手动编辑〜/ .ssh / authorized_keys文件来管理它,但这工作量很大并且容易出错。

在这种情况下,有没有现成的工具来管理公共密钥?您有自己的解决方案吗?还是以这种方式管理系统的整个想法存在缺陷?


我不能真正回答您的问题,但是当我阅读它时,我只能听到它在为某种数据库系统发出尖叫。
约翰·加迪尼尔

确实,我可以在“后端”(“密钥服务器”)上看到一个数据库位置,尽管我希望限制那里的数据库访问并通过SSH通道分发密钥。不要在受管系统上打开任何其他通信通道。实际上,我觉得自己有能力实施这样的工具/系统,尽管我更喜欢现成的且证明有效的工具。
Jacek Konieczny

Answers:


18

如pulegium所述,任何通用配置管理软件(如PuppetChefBcfg2cfengine)都可以完成任务。

由于authorized_keys文件并不那么复杂,因此您也可以使用rsyncgithg之类的(D)SCM 来管理此文件。您在其中一台服务器上拥有“主”文件,并通过rsync / git / hg /…进行提供。在其他每台服务器上,您都运行cron作业,该作业会定期检索主副本(如果已更改)并将其复制到正确的本地位置。哎呀,这甚至可以用于纯HTTP或FTP。

最重要的是:拥有您的authored_keys文件的一个“主”副本并进行更新。让“客户端”(计算机,应该具有当前的authorized_keys文件)从主服务器获取并在本地部署。


1
我们可以轻松地使用puppet来管理约200个Linux服务器(发布密钥只是要作为用户属性强制执行的文件)。
ForgeMan

1
我会接受这个答案,因为看来我不会好起来。看来对我来说选择是:1.保持现状2.建立自己的工具链来管理authorized_keys文件3.使用一些现有的通用工具来管理服务器,例如Puppet或Chef……尽管这些工具似乎太大了这个简单的任务。4.使用其他身份验证/授权机制(如Kerberos)…尽管对于完成简单任务来说,这似乎也太复杂了,谢谢。
Jacek Konieczny

该系统与提取主副本所通过的通道一样安全。
约克(yrk)2012年

1
Ansible是一个非常轻量级的CM系统,它具有一个模块,可以通过ssh来处理授权密钥文件。参见ansible.cc/docs/modules.html#authorized-key
RS

11

OpenSSH有一个可用的修补程序,允许它使用LDAP服务器中的公钥,但这只有在还针对该LDAP服务器进行了身份验证/帐户检查的情况下才有意义(这是我的环境的设置方式)。而且,它仅与LDAP配置一样安全(因此,您想使用SSL和验证密钥)。

有关补丁程序和更多详细信息,请参见http://code.google.com/p/openssh-lpk/。我不知道默认情况下该补丁附带的任何操作系统,但是如果您运行的是FreeBSD,那么如果您从端口使用OpenSSH,则它是一个可选补丁。


1
顺便说一句,使用pam_ldap还可以解决“授权今天访问机器A的人明天可能没有授权明天访问它的问题”的问题-如果您对此方面感兴趣,请阅读pam_ldap ...
voretaq7 2010年

5

我运行了一个非常简单的解决方案,对防火墙规则也是如此

示例文件hosts.conf:

192.168.0.1
192.168.2.99
192.168.2.100

Distribution.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;

那就是整个魔术:-)


5

我目前正在检查SSH KeyDB。它的目的就是要做到这一点,管理角色,服务器和用户,分发用户密钥,收集主机密钥等。它甚至有一个叫做“位置”的东西。

我还没有解决所有问题,也不确定它是否可以正常工作。该代码是用python编写的,并且似乎是相当可管理的,因此,将它清理干净并使它正常工作应该并不难。


1

我不确定您的意思是什么,也不知道您是否愿意更改,但是Kerberos是您要寻找的机器人。这样可以优雅地解决您的问题,并且可以对人员和机器进行身份验证。


1

您要解决两个(通常变成3个)不同的问题:

  • 身份验证(您是谁?)
  • 授权(是否允许您访问此服务器?)
  • 审核(您做了什么?)

有时,公钥身份验证是一种不错的身份验证方法,但根本无法解决授权问题。我不喜欢公共密钥身份验证,因为除非有适当的控制措施,否则折衷非常容易(尤其是在内部)。

这就是像Kerberos这样的解决方案发挥作用的地方。在Windows世界中,Active Directory解决了此问题。在Unix世界中,有很多选择,这既是好事,也是坏事。

我将检查Red Hat FreeIPA项目,该项目是一个软件捆绑包,可让您轻松启动并运行类似AD的Kerberos / LDAP / DNS系统。


我确实了解身份验证,授权和审核之间的区别。SSH的“ authorized_keys”提供身份验证和授权数据。它远非完美,但很简单。而且简单性通常在安全性方面也是一大优势。Kerberos及其复杂的基础结构可能比ssh及其authorized_keys文件具有更多的安全性故障。不过,这并不意味着一个或另一个更为安全。
Jacek Konieczny

对于少数服务器而言,管理authorized_keys文件是np,但是您很快就无法管理它。我并不是要说这是一个“糟糕”的解决方案。同样,Kerberos的复杂性不适用于两台服务器...但是在更大的环境中,对Kerberos的设计/实现进行投资是值得的。
duffbeer703


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.