为puppetmaster上的客户端生成ssh主机密钥

我寻找一个解决scheme,为木偶大师的傀儡客户端创buildSSH主机密钥。 我做了一些研究,发现http://jsosic.wordpress.com/2012/12/04/managing-ssh-host-keys-with-puppet/ ,但我无法得到它的工作。 有一个更优雅的解决scheme来处理这个或完整的例子吗?

我知道可以在客户端生成主机密钥并将其备份到puppetmaster,但是我真的希望直接在主服务器上生成它们。

编辑:

我创build了一个模块“ssh”。

init.pp的内容是:

 class ssh :: server {
  如果生成('/ etc / puppet / modules / ssh / scripts / generate_host_keys.sh',
 $ keys_dir){
    包括ssh :: server :: keys
   }
 }

类的SSH ::服务器::键{
   file {'/etc/ssh/ssh_host_rsa_key.pub':
    确保=>文件,
    所有者=> root,
     group => root,
     mode =>'0644',
    来源=> [
       '木偶:///private/ssh/ssh_host_rsa_key.pub',
       '木偶:///modules/ssh/ssh_host_rsa_key.pub',
     ]
     require => Package ['openssh-server'],
     notify => Service [$ service_name],
   }
 }

generate_host_keys.sh的内容如下:

 #!/斌/庆典

 #检查键arg0:dir
 [-z“$ 1”] && echo“请指定密钥生成目录”&& exit 1
 KEYSDIR = “$ 1”

 #设置umask
 umask 0022

 #创build目录树,如果它不存在
 [!  -d“$ KEYSDIR”] && mkdir -p $ KEYSDIR

 #
从CentOS 6 sshd初始化脚本中窃取的#函数
 #

 #一些函数使下面的更具可读性
 KEYGEN =的/ usr /斌/ SSH-密钥生成
 RSA1_KEY = $ 1 / ssh_host_key
 RSA_KEY = $ 1 / ssh_host_rsa_key
 DSA_KEY = $ 1 / ssh_host_dsa_key

 #源码函数库
 。  /etc/rc.d/init.d/functions

 fips_enabled(){
  如果[-r / proc / sys / crypto / fips_enabled]; 然后
     cat / proc / sys / crypto / fips_enabled
  其他  
    回声0
  科幻
 }

 do_rsa1_keygen(){
  如果[!  -s $ RSA1_KEY -a`fips_enabled` -eq 0]; 然后
     echo -n $“生成SSH1 RSA主机密钥:”
     rm -f $ RSA1_KEY
    如果testing!  -f $ RSA1_KEY && $ KEYGEN -q -t rsa1 -f $ RSA1_KEY -C''-N''>&/ dev / null; 然后
       chmod 600 $ RSA1_KEY
       chmod 644 $ RSA1_KEY.pub
      成功$“RSA1密钥生成”
      回声
    其他  
      失败$“RSA1密钥生成”
      回声
      出口1
    科幻
  科幻
 }

 do_rsa_keygen(){
  如果[!  -s $ RSA_KEY]; 然后
     echo -n $“生成SSH2 RSA主机密钥:”
     rm -f $ RSA_KEY
    如果testing!  -f $ RSA_KEY && $ KEYGEN -q -t rsa -f $ RSA_KEY -C''-N''>&/ dev / null; 然后
       chmod 600 $ RSA_KEY
       chmod 644 $ RSA_KEY.pub
      成功$“RSA密钥生成”
      回声
    其他 
      失败$“RSA密钥生成”
      回声
      出口1
    科幻
  科幻
 }

 do_dsa_keygen(){
  如果[!  -s $ DSA_KEY]; 然后
     echo -n $“生成SSH2 DSA主机密钥:”
     rm -f $ DSA_KEY
    如果testing!  -f $ DSA_KEY && $ KEYGEN -q -t dsa -f $ DSA_KEY -C''-N''>&/ dev / null; 然后
       chmod 600 $ DSA_KEY
       chmod 644 $ DSA_KEY.pub
      成功$“DSA密钥生成”
      回声
    其他
      失败$“DSA密钥生成”
      回声
      出口1
    科幻
  科幻
 }

 #主要
 do_rsa1_keygen
 do_rsa_keygen
 do_dsa_keygen
 chmod -R 644 $ KEYSDIR / *
退出0

清单/ site.pp看起来像那样

节点{'mynode':
  包括ssh :: server
 }

运行木偶代理 – 在客户端上testing产生以下输出:

信息:检索插件
错误:无法从远程服务器检索目录:SERVER上的错误400:无法执行生成器/etc/puppet/modules/ssh/scripts/generate_host_keys.sh:执行/ etc / puppet / modules / ssh / scripts / generate_host_keys。 sh'返回1:在节点nodename上的/etc/puppet/modules/ssh/manifests/init.pp:2
警告:在失败的目录上不使用caching
错误:无法检索目录; 跳过跑步

谢谢,

保罗

  1. 尝试添加/usr/bin/env作为生成函数的第一个参数:

    如果生成('/ usr / bin / env','/ etc / puppet / modules / ssh / scripts / generate_host_keys.sh',$ keys_dir){

  2. validation您的脚本在退出时返回0,非零返回码将使parsing器抛出一个错误400