将版本控制中的服务器SSH密钥存储不好吗?

我们正在编写脚本来自动重新部署我们的服务器。 这些脚本存储在版本控制中。

有些服务器需要访问专用的Git存储库,而访问受SSH的限制。 在configuration脚本的其余部分存储私有SSH密钥在版本控制中是愚蠢的还是有一个明显的select?

理想情况下,我们不需要每次重新安装服务器时创build新的密钥对。

私钥可以与密码进行比较,就好像您拥有私钥,您可以访问此密钥所用的系统。

只有当有权访问密钥的人才能访问版本控制系统时,将密钥放入版本控制系统才是不成问题的。

你必须定义你的安全级别,你的存储库是否安全? 它比你的决赛服务器更安全吗? 至less相同的安全性? 您必须记住,任何访问您的存储库的人都将访问您的总决赛服务器。

理想情况下,我将在您正在编写的脚本中将代码中的数据分开。 这意味着将所有资产存储在存储库以外,可能是使用GPG签名的特定于您的分发(dpkg,RPM等)的软件包。 这将使您的脚本更抽象,更灵活,更容易维护,但您将不得不学习如何为您的发行版创build包。

如果您坚持使用您的所有服务器之间共享的密钥,至less在安装期间对其进行encryption并要求input密码。 这样密码将不会被存储在存储库中,并且可以在必要时进行更改。

不pipe您的存储库有多安全,您都必须记住,如果您将私钥在(D)VCS中保持未encryption,则会将其分发给所有将要开发的人员。 那在我看来,含有任何信息的泄漏要困难得多。 在这种情况下,考虑到你的团队成员离开的情况,你将需要一种方式来撤销并发布一组新的密钥。

我不会轻易放弃为每个新服务器生成新密钥对的可能性。 我想公钥的分配是困扰你的,但这不是一个无法解决的任务。 根据您的安装脚本,生成的公钥可以在过程中显示并添加到存储库的访问列表中。

您是否计划使用某种configurationpipe理或仪器系统来引导和configuration服务器? 如果没有,我强烈build议你考虑使用一个而不是开发一组脚本。 它们为服务器pipe理提供了很多其他的好处,特别是这个任务。 傀儡,厨师,cfengine,salt,bcfg2(以及其他一些人)甚至一些远程仪表系统(如Fabric和Ansible)使得导出一组公钥的过程非常容易和轻松。