12.5. 管理主机的公共 SSH 密钥
OpenSSH 使用 公钥 对主机进行身份验证。一台计算机尝试访问另一台计算机并显示其密钥对。主机第一次进行身份验证时,目标计算机上的管理员必须手动批准请求。然后,机器将主机的公钥存储在
known_hosts
文件中。每当远程机器再次尝试访问目标机器时,目标机器只需检查其 known_hosts
文件,然后自动授予对批准的主机的访问权限。
这个系统有几个问题:
known_hosts
文件将主机条目存储在主机 IP 地址、主机名和密钥的 triplet 中。如果 IP 地址发生更改(在虚拟环境和数据中心中很常见)或更新密钥,此文件可以快速过时。- SSH 密钥必须手动分发给环境中的所有计算机。
- 管理员必须批准主机密钥才能将它们添加到配置中,但很难正确验证主机或密钥问题者,这可能会导致安全问题。
在 Red Hat Enterprise Linux 上,系统安全服务守护进程(SSSD)可以配置为缓存和检索主机 SSH 密钥,以便应用程序和服务必须只查找主机密钥的一个位置。由于 SSSD 可以使用身份管理作为其身份信息提供商之一,因此身份管理提供了密钥的通用和集中存储库。管理员无需担心分发、更新或验证主机 SSH 密钥。
12.5.1. 关于 SSH 密钥格式 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
当密钥上传到 IdM 条目时,密钥格式可以是 OpenSSH 样式的密钥或 原始 RFC 4253 风格的 Blob。任何 RFC 4253 风格的密钥都会自动转换为 OpenSSH 样式的密钥,然后再导入并保存到 IdM LDAP 服务器中。
IdM 服务器可以从上传的密钥 blob 中识别密钥类型,如 RSA 或 DSA 密钥。但是,在文件(如
~/.ssh/known_hosts
)中,密钥条目由服务器的主机名和 IP 地址标识,然后输入密钥本身。例如:
host.example.com,1.2.3.4 ssh-rsa AAA...ZZZ==
host.example.com,1.2.3.4 ssh-rsa AAA...ZZZ==
这与用户公钥条目稍有不同,后者中含有 类型为 key== 注释 的元素:
"ssh-rsa ABCD1234...== ipaclient.example.com"
"ssh-rsa ABCD1234...== ipaclient.example.com"
可以将密钥文件中的所有三个部分上传到,再查看主机条目。在这种情况下,需要重新排序
~/.ssh/known_hosts
文件中的主机公钥条目,以匹配用户密钥的格式,输入 key== comment :
ssh-rsa AAA...ZZZ== host.example.com,1.2.3.4
ssh-rsa AAA...ZZZ== host.example.com,1.2.3.4
可以从公钥的内容中自动确定密钥类型,注释是可选的,从而更轻松地识别单个密钥。唯一必需的元素是公钥 Blob 本身。
12.5.2. 关于 ipa-client-install 和 OpenSSH 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
默认情况下,ipa-client-install 脚本在 IdM 客户端机器上配置 OpenSSH 服务器和客户端。它还将 SSSD 配置为执行主机和用户密钥缓存。基本上,只需配置客户端即可执行主机使用 SSSD、OpenSSH 和身份管理进行密钥缓存和检索所需的所有配置。
如果使用客户端安装(默认值)启用了 SSH 服务(默认值),则在 ssh 服务首次启动时会创建一个 RSA 密钥。
注意
当使用 ipa-client-install 将机器添加为 IdM 客户端时,会创建带有两个 SSH 密钥 RSA 和 DSS 的客户端。
还有额外的客户端配置选项
--ssh-trust-dns
,可以使用 ipa-client-install 运行,并自动配置 OpenSSH 来信任存储密钥指纹的 IdM DNS 记录。
或者,也可以使用
--no-sshd
选项,在安装客户端时禁用 OpenSSH。这可防止安装脚本配置 OpenSSH 服务器。
另一个选项
--no-dns-sshfp
可防止主机使用自己的 DNS 条目创建 DNS SSHFP 记录。这可与 --no-sshd 选项或不带 --no-sshd
选项一起使用。
12.5.3. 通过 Web UI 上传主机 SSH 密钥 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
- 主机的密钥可以从
~/.ssh/known_hosts
检索。例如:server.example.com,1.2.3.4 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEApvjBvSFSkTU0WQW4eOweeo0DZZ08F9Ud21xlLy6FOhzwpXFGIyxvXZ52+siHBHbbqGL5+14N7UvElruyslIHx9LYUR/pPKSMXCGyboLy5aTNl5OQ5EHwrhVnFDIKXkvp45945R7SKYCUtRumm0Iw6wq0XD4o+ILeVbV3wmcB1bXs36ZvC/M6riefn9PcJmh6vNCvIsbMY6S+FhkWUTTiOXJjUDYRLlwM273FfWhzHK+SSQXeBp/zIn1gFvJhSZMRi9HZpDoqxLbBB9QIdIw6U4MIjNmKsSI/ASpkFm2GuQ7ZK9KuMItY2AoCuIRmRAdF8iYNHBTXNfFurGogXwRDjQ==
server.example.com,1.2.3.4 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEApvjBvSFSkTU0WQW4eOweeo0DZZ08F9Ud21xlLy6FOhzwpXFGIyxvXZ52+siHBHbbqGL5+14N7UvElruyslIHx9LYUR/pPKSMXCGyboLy5aTNl5OQ5EHwrhVnFDIKXkvp45945R7SKYCUtRumm0Iw6wq0XD4o+ILeVbV3wmcB1bXs36ZvC/M6riefn9PcJmh6vNCvIsbMY6S+FhkWUTTiOXJjUDYRLlwM273FfWhzHK+SSQXeBp/zIn1gFvJhSZMRi9HZpDoqxLbBB9QIdIw6U4MIjNmKsSI/ASpkFm2GuQ7ZK9KuMItY2AoCuIRmRAdF8iYNHBTXNfFurGogXwRDjQ==
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如有必要,生成主机密钥。在使用 OpenSSH 工具时,请确保使用空白密码短语,并将密钥保存到与用户的~/.ssh/
目录不同的位置,因此它不会覆盖任何现有密钥。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 从 密钥文件复制公钥。full key 条目的格式为 主机名,IP 类型 key==。仅需要 key==,但可以存储整个条目。若要使用 条目中的所有元素,请重新排列条目,使其顺序为 key== [host name,IP]
cat /home/jsmith/.ssh/host_keys.pub ssh-rsa AAAAB3NzaC1yc2E...tJG1PK2Mq++wQ== server.example.com,1.2.3.4
[jsmith@server ~]$ cat /home/jsmith/.ssh/host_keys.pub ssh-rsa AAAAB3NzaC1yc2E...tJG1PK2Mq++wQ== server.example.com,1.2.3.4
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 打开 Identity 选项卡,然后选择 Hosts 子选项卡。
- 单击要编辑的主机的名称。
图 12.4. 主机列表
- 在 Settings 选项卡的 Host Settings 区域,单击 SSH 公钥 旁边的 Add。
图 12.5. 添加 SSH 密钥
- 粘贴主机的公钥,然后单击。
图 12.6. 设置 SSH 密钥
SSH 公钥 区域现在显示新密钥。单击 Show/Set key 将打开提交的密钥。 - 要上传多个密钥,请单击公钥列表下的 Add 链接,并上传其他密钥。
- 提交所有密钥后,单击主机页面顶部的 Save 以保存更改。
保存公钥后,条目将显示为密钥指纹、注释(如果包含公钥)和密钥类型[2].
上传主机密钥后,将 SSSD 配置为使用身份管理作为其身份域之一,并设置 OpenSSH 以使用 SSSD 工具来管理主机密钥,如 第 22.6 节 “配置 SSSD 为 OpenSSH 服务提供缓存” 所述。
12.5.4. 从命令行添加主机密钥 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
主机 SSH 密钥添加到 IdM 中的主机条目中,可以是使用 host-add 创建或稍后修改条目时。
注意
RSA 和 DSS 主机密钥由
ipa-client-install
命令创建,除非安装脚本中明确禁用了 SSH 服务。
- 使用
--sshpubkey
选项运行 host-mod 命令,将 base64 编码的公钥上传到主机条目。添加主机密钥也会更改主机的 DNS SSHFP 条目,因此也使用--updatedns
选项来更新主机的 DNS 条目。例如:ipa host-mod --sshpubkey="ssh-rsa RjlzYQo==" --updatedns host1.example.com
[jsmith@server ~]$ ipa host-mod --sshpubkey="ssh-rsa RjlzYQo==" --updatedns host1.example.com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 实际密钥通常也以等号(=)结尾,但时间较长。要上传多个密钥,请输入多个--sshpubkey
命令行参数:--sshpubkey="RjlzYQo==" --sshpubkey="ZEt0TAo=="
--sshpubkey="RjlzYQo==" --sshpubkey="ZEt0TAo=="
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意个主机可以有多个公钥。 - 上传主机密钥后,将 SSSD 配置为使用身份管理作为其身份域之一,并设置 OpenSSH 以使用 SSSD 工具来管理主机密钥,如 第 22.6 节 “配置 SSSD 为 OpenSSH 服务提供缓存” 所述。
12.5.5. 删除主机密钥 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
主机密钥在过期或不再有效后可将其删除。
要删除单个主机密钥,最简单的方法是通过 Web UI 删除该密钥:
- 打开 Identity 选项卡,然后选择 Hosts 子选项卡。
- 单击要编辑的主机的名称。
图 12.7. 主机列表
- 在 SSH 公钥 区域中,点 Delete by the key 的指纹将其移除。
图 12.8. 公钥删除
- 单击主机页面顶部的 Save,以保存更改。
命令行工具可用于删除所有密钥。这可以通过运行 ipa host-mod,并将
--sshpubkey=
设置为空白值;这将删除主机 的所有 公钥。此外,使用 --updatedns
选项更新主机的 DNS 条目。例如:
kinit admin ipa host-mod --sshpubkey= --updatedns host1.example.com
[jsmith@server ~]$ kinit admin
[jsmith@server ~]$ ipa host-mod --sshpubkey= --updatedns host1.example.com