在我工作过的每家公司,管理 ssh 密钥总是一件很麻烦的事。我们有不同的管理方式。但大多数都是一些 CM 系统,如 puppet/chef/ansible,或者只是手动复制密钥,甚至是一些丑陋的 bash 脚本 :D
还听说有些人使用 LDAP 或任何 DB 作为 ssh 密钥存储。但您仍然需要一些额外的自动化功能,例如一些 CM 工具来在服务器上放置/删除密钥。
所以问题是,是否有我不知道的先进而现代的方法?大型 IT 公司(如谷歌或 Facebook 等)如何处理密钥?
答案1
(元:在我看来,这个问题不是基于观点的。)
如果您使用的是较新的 Linux/Unix 版本,并且安装了较新的 OpenSSH,则可以使用 OpenSSH 证书。如果您想要使用 MFA 获得“票证”的感觉,则可以颁发临时 OpenSSH 证书。
OpenSSH 证书的要点是,在 sshd 端唯一需要安装的是使用指令引用的 SSH-CA 公钥sshd_config 中的 TrustedUserCAKeys。
根据指令授权主体*您还可以接受 OpenSSH 证书中另一个本地用户帐户的一组主体名称(基本上是用户名)。
OpenSSH 证书不是 X.509 证书,它们具有源树文档中指定的不同格式协议.certkeys。
你会发现几个网页如何使用ssh-keygen使用 SSH-CA 签署公钥(例如使用 SSH 证书)。
我已经为作为 Web 服务运行的客户实现了这样一个小型 SSH-CA,用于基于多因素身份验证(LDAP 和 OTP)颁发临时用户证书。
您会在常见的地方找到几种开源实现。我故意不在这里列出清单,因为在查看了其中几个之后,我已经实现了自己的实现,因此不想认可特定的实现。这并不意味着这些实现不起作用。它们只是不符合我的特定客户要求。
警告:
目前它只适用于OpenSSH或者库在客户端。油灰尚不支持此功能。网络设备和其他特殊设备也不支持此功能。
PS:我仍然建议使用基于 LDAP 的用户管理,它将满足您的更多需求。