为近30个用户自动创build大量(近9000个)服务器的SSH密钥

有没有办法自动为近30个用户创build大量(近9000)的服务器的SSH密钥

如果您在同一pipe理下拥有9000台服务器,则可能会采用某种forms的configurationpipe理 。 这可能是傀儡,厨师,Ansible等forms。你可以通过这种方式分配公钥。

对于30个用户,这也可以通过中央目录authentication(LDAP,Active Directory)来处理。

你可能做错了。

(30)中的每个用户必须创build他自己的(因此是私人的)密钥。 每个用户的公共密钥到达他应该访问的每个服务器(9000)。

不要这样做。

如果你的服务器使用了不错的最新openssh版本(我认为是> 5.4),那么你应该看看那里的基于证书的authentication。 你可以在这里find这个function的介绍: http : //neocri.me/documentation/using-ssh-certificate-authentication/或者在ssh包文档中。

为了简短,

  • 用户生成他们的私钥/公钥对。
  • 您(pipe理员)创build一个或多个您将用于签署用户公钥的SSH CA证书(您的用户ca)。
  • 您(pipe理员)使用一个CA证书对用户公钥进行签名。 例如“ssh-keygen -s your-user-ca -I”username“-Z username -V + 52w user-key.pub”。 这会创build一个user-key-cert.pub,您需要将其发回给适当的用户。
  • 您(pipe理员)在您的9000服务器的sshdconfiguration中安装可信的SSH CA证书。 您不需要声明每个用户的每个公用密钥。
  • 用户可以连接。

心连心。

我将使用Puppet将公共主机密钥分发到所有机器,以便用户可以login,而不必维护一个known_hosts文件(只要它们在这9000台机器中进行SSH连接)。

主机密钥:

  1. 让每个节点创build一个公钥/私钥。 在使用它的机器上生成密钥是最安全的,这样私钥永远不会离开主机,也不需要保护。

  2. 使用Puppet的“导出资源”function将私钥发送到中央数据库。

  3. 在所有节点上,拉入“导出的资源”以在本机上生成已知的主机密钥文件。 任何新节点将出现在2个木偶运行中的所有其他节点中。

这里是一个导出资源的例子。

以下是分发SSH主机密钥的具体示例。

用户访问:

您可以使用Puppet将每个主机的sshd_config文件设置为信任主机密钥等,或任何你想要的政策是:

augeas { 'sshd_config': context => '/files/etc/ssh/sshd_config', changes => [ 'set PermitRootLogin without-password', 'set ANOTHERSETTING VALUE', ], }

用户帐号:

木偶还可以在所有机器上创build30个帐户。 我喜欢Puppet Enterprise自带的账户模块 。 但是,如果您拥有开源版本,则很容易。 这是一个如何做到这一点的例子 。

一些一般的build议:

9,000台机器是一个大环境。 你需要将你的Puppet文件保存在Git中,使用持续集成和testing框架(如Jenkins CI),并且有一个testing环境,在你推送之前,你可以尝试一下。 我们如何在Stack Exchange,Inc做这件事, logging在这篇博文中 。

  1. 让每个用户创build一个公钥/私钥。

  2. 将每个用户的公钥分配给每个服务器

  3. 利润。

所有的开玩笑,这是一个经典的configurationpipe理问题。 考虑到除了发布密钥之外,您还需要至less创build主目录和用户帐户以及个人.ssh目录。

我没有试图一次性解决所有的30/9000,而是开始在一台服务器上自动化一个用户,并从那里开始构build。

一般参见: 木偶 , 厨师 , 盐 , Ansible指针。