我寻找一个解决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