如何使用 Puppet 在系统重建期间维护 SSH 主机密钥?

如何使用 Puppet 在系统重建期间维护 SSH 主机密钥?

我有几个实验室环境,其中的计算机会定期重建,但需要保留相同的 ssh 主机密钥,以便连接到实验室计算机的人(通常来自他们自己的系统,不在我的管理范围内)不会收到“主机密钥更改”错误每次我们升级实验室系统的操作系统时。

(这类似于问题处理 SSH 主机验证错误的最顺畅的工作流程?但在这种情况下,我们已经决定在系统重建过程中维护相同的密钥是最好的解决方案。)

现在,我有一个名为的 Puppet 模块ssh,其中包含以下子句:

file { "/etc/ssh/":
  owner   => 'root',
  group   => 'root',
  mode    => '0644',
  source  => "puppet:///modules/ssh/$fqdn",
  recurse => true,
  require => Package['openssh-server'],
  notify  => Service['sshd'],
}

在 Puppet Master 上,每个主机都有自己的目录,其中包含所有主机密钥文件(、、ssh_host_key等),如资源定义所暗示的那样。我的问题是,这感觉像是混合了代码和数据(因为所有主机密钥都位于模块目录中),每次添加一组新主机时,我都必须再次提交给 Puppet VCS。有没有更好的方法来管理这些东西?ssh_host_dsa_keyssh_host_rsa_keyfile

答案1

我的问题是,这感觉就像混合了代码和数据(因为所有主机密钥都位于模块目录中),每次添加一组新主机时,我都必须再次提交给 Puppet VCS。有没有更好的方法来管理这些东西?

如果您想将您的 puppet 文件与 SSH 配置/密钥分开,您可以调整您的fileserver.conf并基本上共享您仅用于 ssh 配置的另一个目录。

fileserver.conf
[sshconfig]
  path /srv/puppet/sshconfig/
  allow *

使用上述配置,您的清单可能如下所示,并且文件将从中检索/srv/puppet/sshconfig/$fqdn/

file { "/etc/ssh/":
  source  => "puppet:///sshconfig/$fqdn",
  ...
}

答案2

我的建议是创建一个module或一个script将您知道的主机上传到external服务器的地方,然后在此文件中给出一个sort -u,排除任何重复的条目,然后将此文件上传到您的所有机器,当然也要注意其中的新条目ssh_known_hosts

相关内容