我如何使用Puppet在系统重build中维护SSH主机密钥?

我有几个实验室环境,定期重build计算机,但需要保持相同的SSH主机密钥,以便连接到实验室计算机的人员(通常来自他们自己的系统,而不是我的pipe理员)不会得到“每次我们升级实验室系统的操作系统时,主机密钥都会改变“错误。

(这与处理SSH主机validation错误的最stream畅的工作stream程类似,但在这种情况下,我们已经决定在系统重build中维护相同的密钥对我们来说是最好的解决scheme。

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

 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_keyssh_host_dsa_keyssh_host_rsa_key等),如file资源定义所暗示的。 我的问题是,这感觉就像混合代码和数据(因为所有的主机密钥都在一个模块目录内),每次添加一组新的主机时,我必须再次提交到Puppet VCS。 有没有更好的方法来pipe理这些事情?

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

你可以调整你的fileserver.conf ,基本上共享另外一个目录,如果你想把你的puppet文件从SSHconfiguration/密钥中分离出来,你只需要使用ssh config。

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

使用上面的configuration,你的清单可能看起来像下面,文件将从/srv/puppet/sshconfig/$fqdn/检索。

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

我的build议是为你创build一个modulescript ,你上传你知道主机到external服务器,然后你在这个文件中sort -u ,排除任何重复的条目,然后上传这个文件到所有的机器当然也要注意这个ssh_known_hosts的新条目。