我寻找一个解决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 错误:无法检索目录; 跳过跑步
谢谢,
保罗
尝试添加/usr/bin/env
作为生成函数的第一个参数:
如果生成('/ usr / bin / env','/ etc / puppet / modules / ssh / scripts / generate_host_keys.sh',$ keys_dir){
validation您的脚本在退出时返回0,非零返回码将使parsing器抛出一个错误400