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

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

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

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

答案1

有很多方法可以做到这一点,特别是如果您使用的是最新版本的 OpenSSH。还要记住,您需要的不仅仅是一种添加它们的方法,您还需要一种删除它们的方法(并且要快速 - 考虑密钥是否被泄露、人员是否不愉快等)。一个需要一天时间才能传播的关键附加内容是令人烦恼的。需要一天时间才能传播的密钥删除是一个严重的安全问题。

请记住轻松删除的重要性,这建议了一些方法:

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

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

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

    3b.乌尔里希·施瓦茨指出您可以更改用户授权密钥文件的位置;并不需要如此~/.ssh/authorized_keys。因此,您可以共享包含所有用户授权密钥文件的目录,而无需完全共享主目录的开销。

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

答案2

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

答案3

使用主机创建文件:

$ vim server.list
server1.ru
server2.ru
192.168.0.100
192.168.0.101
...

安装 sshpass:

# apt-get install sshpass

创建用于 ssh 复制的简单脚本:

$ vim script.sh
#!/bin/bash
while read -r line
do
    echo "running $line"
    sshpass -p sshPassword ssh-copy-id userName@$line -o "StrictHostKeyChecking no"
done < "server.list"

运行脚本:

$ sh script.sh
running server1.ru
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys

Number of key(s) added: 1
running server2.ru
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys

Number of key(s) added: 1

来源

相关内容