将用户的公共 SSH 密钥分发给多台主机的最佳方式?

Tim*_*iam 7 ssh key-authentication

显然,我可以将用户需要 SSH 访问的每个主机的密钥 scp。但如果有很多主机,这可能需要很长时间。特别是如果尚未设置公钥身份验证,每个 scp 都会要求我输入密码。这可能非常耗时且烦人。

使用自动挂载的主目录会解决这个问题吗?因为这样每个主机都会为每个用户使用相同的主目录,所以公钥只需要复制一次。然而,这似乎不对。有人可以给我建议吗?

der*_*ert 7

有很多方法可以做到这一点,特别是如果您使用的是最新版本的 OpenSSH。还请记住,您需要的不仅仅是添加它们的方法,您还需要一种删除它们的方法(并且要迅速——考虑密钥是否已泄露,该人是否与对方关系不佳等)。一个需要一天传播的关键添加是一个烦恼;需要一天才能传播的密钥删除是一个严重的安全问题。

记住移除容易的重要性,这提出了一些方法:

  1. 听起来您已经有了一些快速创建用户的方法。例如,很有可能是 LDAP。LDAP 可以存储 SSH 公钥,您可以使用配置选项将其挂接到 sshd AuthorizedKeysCommand。例如,如果您正在运行 SSSD,sss_ssh_authorizedkeys则适用于此。(参见,例如,关于 SSSD 授权密钥的 RedHat 文档)。密钥的添加和删除可以是即时的,最坏的情况通常是 LDAP 传播的几秒钟。您很可能可以完全自动化(如果您有一堆用户可能已经拥有!),无需管理员干预。

  2. 如果您的服务器必须离线处理身份验证(并且超出了 SSSD 的处理能力),另一种方法是使用 OpenSSH 中的证书颁发机构 (CA) 支持。这主要记录在ssh-keygen 联机帮助页的“证书”部分. 基本上,您将服务器的 sshd 设置为信任您的 CA 并自动获取更新撤销列表。然后您使用所述 CA 签署客户端的公钥并将证书提供给客户端。此时,客户端可以使用该证书登录所有服务器。要取消对客户端的授权,请将其添加到吊销列表中(如手册页中紧随其后的部分所述)。密钥添加是即时的,删除取决于您更新撤销列表的频率。不幸的是,SSH CA 没有像 OCSP 这样的东西。可以安全地实现添加的自动化(无需管理员帮助);删除很容易。

  3. 你可以,你建议使用的共享,自动安装(或永久安装;自动安装不需要)主目录,以便所有的服务器看到相同的~/.ssh/authorized_keys-但是这是一个很大的开销,如果你,否则不需要共享$HOME。密钥的添加和删除是即时到相当快的,具体取决于缓存。密钥管理可能完全由用户完成,而不是管理员。

    3b. Ulrich Schwarz指出,您可以更改用户授权密钥文件的位置;它不需要是~/.ssh/authorized_keys。因此,您可以共享一个包含所有用户授权密钥文件的目录,而没有完全共享主目录的开销。

  4. 您可以使用@DopeGhoti 建议的配置管理工具。小心不要忘记主机——尤其是手动添加密钥的主机。可能意味着密钥的添加和删除需要管理员手动干预。


Dop*_*oti 5

Ansible是一个免费ssh的远程系统管理解决方案,旨在在可配置的主机集或主机子集上运行给定的命令(或剧本);对于像分发安全外壳密钥这样简单的事情,这可能是一个低提升的选择。