我可以通过 ssh 访问近十几台机器,而且我自己也倾向于使用多台设备工作(一台主笔记本电脑、一台家用笔记本电脑、一台通过 termux 连接的智能手机、一台通过 termux 连接的平板电脑、一台备用 MacBook、一台安装在办公室的 cygwin)。此外,其中一些机器需要相互访问(例如,通过 ssh 进行 rsync 以进行远程备份)。
当我的设备较少时,我对每对连接的唯一密钥要求非常严格,但这太麻烦了,所以我现在的做法是为每个设备维护两个密钥(称为“个人”和“工作”),并有两个不同的“authorized_keys”文件,其中列出了我所有设备密钥的公钥。我有一个简单的 bash 脚本,可以将这些 authorised_keys 文件推送到正确的机器。
这也从复杂性方面来看是崩溃的,因为例如,有些设备应该有额外的设备间密钥,我不想授予这些密钥访问我所有机器的权限(例如,仅用于备份的密钥不应该被允许访问我的家用笔记本电脑)。
在每台机器上管理密钥(尤其是authorized_keys)的便捷方法是什么?我知道ansible和puppet,也看过它们,但对于我想做的事情来说,它们似乎过于复杂了。
我想对我来说理想的情况是在密钥和机器之间建立某种类型的矩阵映射,然后为所有机器生成正确的authorized_keys文件并推送它,但openssh似乎没有这样的工具。
答案1
没有唯一正确的答案。在一个中型系统上,我创建了一个中央服务器和脚本来推送和维护 ssh 基础设施。然而,这存在扩展限制 - 推送架构的扩展性不如拉取架构。
下一步是使用 puppet、chef 或 cfengine 之类的工具来部署基于拉取的架构。
您还可以转向基于 LDAP 的系统(甚至将 ssh 密钥存储在 LDAP 中)-例如https://shellpower.wordpress.com/2015/05/26/ssh-public-key-authentication-with-ldap-on-ubuntu/或者转到不同的身份验证机制 - SSH 支持相当多的机制。