我正在构建Chef cookbook来设置Salt并管理小兵和主人之间的密钥交换。
我知道Salt minion会在/etc/salt/pki/minion/minion.{pem,pub}
首次启动时自动生成密钥,但我不能依赖于脚本中何时可以获得信息的时间。
从Salt documentation,我可以使用salt-key --gen-keys=[key_name]
在主服务器上生成密钥。但是,出于安全考虑,我宁愿在minion上生成密钥,因此只需要公钥即可离开机器。
键看起来像是相当标准的RSA密钥。 openssl或ssh-keygen生成一个可被Salt接受的密钥的参数是什么?我只是在寻找Salt在这样一个密钥中寻找的位长和其他参数。
非常感谢!
答案 0 :(得分:0)
代码位于salt / crypt.py: https://github.com/saltstack/salt/blob/2014.1/salt/crypt.py#L88
看起来它使用from M2Crypto import RSA
,然后使用gen = RSA.gen_key(keysize, 65537, callback=lambda x, y, z: None)
M2Crypto是OpenSSL的包装。
M2Crypto.RSA.gen_key在这里定义:https://github.com/M2Crypto/M2Crypto/blob/master/M2Crypto/RSA.py#L314
返回M2Crypto.RSA.RSA对象。
查找密钥大小并不容易,在config.py中默认为4096: https://github.com/saltstack/salt/blob/1bfed117560fbde11c88ad7a013be76dc6eadf0f/salt/config.py#L409
公钥以PEM格式保存。
所以看起来你可以用OpenSSL做到这一点。我还没有证实这一点。
答案 1 :(得分:0)
我会使用salt-key
来创建密钥。
[me@elsapo ~]$ sudo salt-key --gen-keys=minion02 --gen-keys-dir=/tmp/testkey
return:
37:6e:6d:42:ba:c6:da:1d:46:28:fb:bc:ce:27:10:13:7c:a2:d8:de:f9:d5:ba:6a:01:4a:f4:72:ad:bd:1b:20
[me@elsapo ~]$ ls /tmp/testkey
minion02.pem minion02.pub
然后,您可以将pem和pub密钥文件移动到任何您想要的位置。
答案 2 :(得分:0)
我也有类似的问题,在Vagrant中使用Salt。正确的解决方案当然总是要运行
salt-key --gen-keys=master
但是,在我的情况下,密钥需要在主机(未安装Salt的主机)上生成,但是Vagrant salt Provisioner希望找到它们,以便将其复制到新的VM。
您可以使用OpenSSL生成它们。生成带有以下内容的私钥:
openssl genrsa -out master.pem
,然后使用以下公用密钥:
openssl rsa -in master.pem -pubout -out master.pub
以这种方式生成的键的默认值似乎与salt-key生成的键相同,但默认值为YMMV。