![是否可以将 ssh 公钥 id_dsa.pub 存储在集中式服务器上](https://linux22.com/image/543839/%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E5%B0%86%20ssh%20%E5%85%AC%E9%92%A5%20id_dsa.pub%20%E5%AD%98%E5%82%A8%E5%9C%A8%E9%9B%86%E4%B8%AD%E5%BC%8F%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A.png)
我想知道是否可以将用于 ssh 登录的公钥存储在中央服务器上,并让我登录的所有服务器都指向该中央服务器以获取我的公钥。这样我就不必将我的公钥复制到我登录的每个服务器,如果可以的话,我该如何使用 ssh-agent 和 keychain 结合使用,以减少登录服务器所需的次数。我不想使用无密码私钥,因为我非常担心我的凭据落入坏人之手。
答案1
另一个解决方案是出口资源和傀儡。
程序
- 将公共 ssh 密钥放在 puppet 服务器上
- 配置导出的资源以将文件放置在
$HOME/.ssh/authorized_keys
- 收集所有其他箱子上的钥匙
这需要一个带有服务器的集中式 Puppet 基础设施。导出的资源只能通过 Puppet 服务器获得(巧合的是,这几乎是所有指南和文档中的默认设置)
参考
- https://puppet.com/docs/puppet/latest/lang_exported.html
- https://projects.puppetlabs.com/projects/puppet/wiki/Module_Ssh_Auth_Patterns
我更喜欢这样而不是修补 SSH,因为您可以通过这种方式使用默认发行版包,而不必求助于您的包(这会引入在所有主机上安装它的问题,即使使用存储库,您也需要配置 yum 或 apt 来了解它)。
Puppet 也需要接触每个主机。但只需一次,之后您就可以从工作站管理一切。是的:可以使用 chef、bcfg2 或 cfengine(或花哨的 ssh for 循环)来完成,我只是恰好比其他选项更喜欢 puppet。
另外:这不是5 分钟就搞定了解决方案。但是,一旦你管理了你的主机,你就会问自己为什么这一切都是从 ssh 密钥开始的,毕竟你不需要登录(在理想的世界中)
编辑:只需阅读上面/下面的评论(取决于您的排序),您无法控制一切。我建议您仔细看看它,并决定是否值得付出努力来引入这样的事情。Fabric 可能是一种替代方案,因为您可以使用单个密码输入在大量主机上运行命令,因此只需输入一次密码并分发密钥,然后如果您发现它有进一步的用途,即使没有密码也可以运行 fabric。
答案2
解决此问题的一种方法是将您的公共 ssh 密钥存储在 ldap 服务器上。我不确定是否有任何 ssh 实现内置了此功能,但您可以使用补丁 OpenSSHOpenSSH-LPK才能使其工作。我还没有尝试过,大概只有当您已经设置了 ldap 基础结构时才有效。
答案3
您可以通过 automount 挂载您的主目录。这样,无论您登录到哪个服务器,您都会拥有一份公钥副本。
答案4
两个答案:
是的,理论上,您可以使用一些非常丑陋的符号链接和 NFS 服务器来实现这一点。使用 /etc/skel 目录将符号链接复制到某个 NFS 挂载目录以供 .ssh 使用。这可能会产生各种其他非常非常严重的后果,您不应该这样做。
如果您希望能够在一次登录后无需密码即可登录到您有权限的任何计算机,并且您已经设置了 LDAP 服务器,那么您和您的 LDAP 管理员应该考虑将 LDAP 与 Kerberos 结合起来。设置完成后,您将拥有所谓的单点登录 (SSO) 解决方案 - 一旦您获得登录一台计算机的“票证”,该票证就可以安全地转发到您登录的任何其他计算机。