我有大约20台服务器…我如何pipe理每个SSH密钥和权限?

我有数据库服务器,networking服务器,SVN服务器等。通常我在他们之间ssh …或者他们自动ssh。

我如何pipe理哪些服务器可以login到哪些其他的?

我使用Puppet,并且为每个键定义了一个类,然后是包含这些类的类来定义我所拥有的键的“组”(对我们来说就是人 – 所以L1技术人员,L2技术人员,pipe理人员,开发人员)可以做数据库服务器,文件服务器,SVN服务器等)。 然后,各种types的机器有自己的清单,定义哪些组可以访问这种types的机器,所以开发箱有L1,L2和开发人员,prod服务器有L1和L2,敏感的服务器只有L2,那种的东西。 添加一台新机器只是决定它属于哪个类,并且在我们新的机器debugging过程中logging了几行。

我们使用OpenLDAP来存储用户:

  • 公钥
  • 密码
  • 的UID
  • sudo权利
  • 真名
  • 电话号码
  • 电子邮件
  • 等等。

它稳定,易于扩展,有很多文档和集成function,所以我推荐它。

MIT Kerberos v5. 

Kerberos是一个安全的,基于权限的基于票据的系统,可以理解用户,领域,angular色,机器等的概念。您首先使用票证授予票证进行身份validation,然后在请求特定的权限/login在一台机器上。 您可以控制哪些主体可以通过集中pipe理的〜/ .k5login文件(可能是通过Puppet / cfengine)login到哪个帐户。 configuration基础机器可以有自己的主体/密钥等,以便能够自动更新其他系统。 您还需要确保KDC的身体安全,并将其locking为一两名关键用户,因为这是您撤销校长等的地方。

我敢肯定,你的实现将会有很大的不同,但是上面是我们用来运行的设置的一个非常宽泛的概述。

这是一个复杂的系统,可能需要在执行和安全程序方面进行彻底的改变。 但是根据我的经验,一旦系统到位并正确configuration,系统将变得透明,对各个团队来说负担就会小得多。

你可以在这里阅读更多

MIT Kerberos用户指南

这可以简化您的任务:使用ssh-copy-id [-i [identity_file]] [user@]master-host从每个服务器连接到其中一个服务器。 使用clusterssh将此命令一次性发送给所有服务器。 然后,将master-host中的authorized_keys密钥文件复制到所有其他主机:例如,使用clustersshscp 。 这将做到简单,快速,漂亮,一次:)

您可能会对ssh-agent概念感兴趣,您可能会让ssh-client连接通过用于到达当前位置的ssh-connection(“ssh-connection”)询问“凭证”。

这非常方便。