搜索

12.5. 管理主机的公共 SSH 密钥

download PDF
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==
这与用户公钥条目稍有不同,后者中含有 类型为 key== 注释 的元素:
"ssh-rsa ABCD1234...== ipaclient.example.com"
可以将密钥文件中的所有三个部分上传到,再查看主机条目。在这种情况下,需要重新排序 ~/.ssh/known_hosts 文件中的主机公钥条目,以匹配用户密钥的格式,输入 key== comment
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 密钥

  1. 主机的密钥可以从 ~/.ssh/known_hosts 检索。例如:
    server.example.com,1.2.3.4 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEApvjBvSFSkTU0WQW4eOweeo0DZZ08F9Ud21xlLy6FOhzwpXFGIyxvXZ52+siHBHbbqGL5+14N7UvElruyslIHx9LYUR/pPKSMXCGyboLy5aTNl5OQ5EHwrhVnFDIKXkvp45945R7SKYCUtRumm0Iw6wq0XD4o+ILeVbV3wmcB1bXs36ZvC/M6riefn9PcJmh6vNCvIsbMY6S+FhkWUTTiOXJjUDYRLlwM273FfWhzHK+SSQXeBp/zIn1gFvJhSZMRi9HZpDoqxLbBB9QIdIw6U4MIjNmKsSI/ASpkFm2GuQ7ZK9KuMItY2AoCuIRmRAdF8iYNHBTXNfFurGogXwRDjQ==
    如有必要,生成主机密钥。在使用 OpenSSH 工具时,请确保使用空白密码短语,并将密钥保存到与用户的 ~/.ssh/ 目录不同的位置,因此它不会覆盖任何现有密钥。
    [jsmith@server ~]$ ssh-keygen -t rsa -C "server.example.com,1.2.3.4"
    Generating public/private rsa key pair.
    Enter file in which to save the key (/home/jsmith/.ssh/id_rsa): /home/jsmith/.ssh/host_keys
    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
    Your identification has been saved in /home/jsmith/.ssh/host_keys.
    Your public key has been saved in /home/jsmith/.ssh/host_keys.pub.
    The key fingerprint is:
    SHA256:GAUIDVVEgly7rs1lTWP6oguHz8BKvyZkpqCqVSsmi7c server.example.com
    The key's randomart image is:
    +--[ RSA 2048]----+
    |              .. |
    |               .+|
    |          o   .* |
    |         o . .. *|
    |        S + .  o+|
    |         E . .. .|
    |        . = .  o |
    |         o .  ..o|
    |            .....|
    +-----------------+
  2. 从 密钥文件复制公钥。full key 条目的格式为 主机名,IP 类型 key==。仅需要 key==,但可以存储整个条目。若要使用 条目中的所有元素,请重新排列条目,使其顺序为 key== [host name,IP]
    [jsmith@server ~]$ cat /home/jsmith/.ssh/host_keys.pub
    
    ssh-rsa AAAAB3NzaC1yc2E...tJG1PK2Mq++wQ== server.example.com,1.2.3.4
  3. 打开 Identity 选项卡,然后选择 Hosts 子选项卡。
  4. 单击要编辑的主机的名称。

    图 12.4. 主机列表

    主机列表
  5. Settings 选项卡的 Host Settings 区域,单击 SSH 公钥 旁边的 Add

    图 12.5. 添加 SSH 密钥

    添加 SSH 密钥
  6. 粘贴主机的公钥,然后单击 Set

    图 12.6. 设置 SSH 密钥

    设置 SSH 密钥
    SSH 公钥 区域现在显示新密钥。单击 Show/Set key 将打开提交的密钥。
  7. 要上传多个密钥,请单击公钥列表下的 Add 链接,并上传其他密钥。
  8. 提交所有密钥后,单击主机页面顶部的 Save 以保存更改。
保存公钥后,条目将显示为密钥指纹、注释(如果包含公钥)和密钥类型[2].
上传主机密钥后,将 SSSD 配置为使用身份管理作为其身份域之一,并设置 OpenSSH 以使用 SSSD 工具来管理主机密钥,如 第 22.6 节 “配置 SSSD 为 OpenSSH 服务提供缓存” 所述。

12.5.4. 从命令行添加主机密钥

主机 SSH 密钥添加到 IdM 中的主机条目中,可以是使用 host-add 创建或稍后修改条目时。
注意
RSA 和 DSS 主机密钥由 ipa-client-install 命令创建,除非安装脚本中明确禁用了 SSH 服务。
  1. 使用 --sshpubkey 选项运行 host-mod 命令,将 base64 编码的公钥上传到主机条目。
    添加主机密钥也会更改主机的 DNS SSHFP 条目,因此也使用 --updatedns 选项来更新主机的 DNS 条目。
    例如:
    [jsmith@server ~]$ ipa host-mod --sshpubkey="ssh-rsa RjlzYQo==" --updatedns host1.example.com
    实际密钥通常也以等号(=)结尾,但时间较长。
    要上传多个密钥,请输入多个 --sshpubkey 命令行参数:
    --sshpubkey="RjlzYQo==" --sshpubkey="ZEt0TAo=="
    注意
    个主机可以有多个公钥。
  2. 上传主机密钥后,将 SSSD 配置为使用身份管理作为其身份域之一,并设置 OpenSSH 以使用 SSSD 工具来管理主机密钥,如 第 22.6 节 “配置 SSSD 为 OpenSSH 服务提供缓存” 所述。

12.5.5. 删除主机密钥

主机密钥在过期或不再有效后可将其删除。
要删除单个主机密钥,最简单的方法是通过 Web UI 删除该密钥:
  1. 打开 Identity 选项卡,然后选择 Hosts 子选项卡。
  2. 单击要编辑的主机的名称。

    图 12.7. 主机列表

    主机列表
  3. SSH 公钥 区域中,点 Delete by the key 的指纹将其移除。

    图 12.8. 公钥删除

    公钥删除
  4. 单击主机页面顶部的 Save,以保存更改。
命令行工具可用于删除所有密钥。这可以通过运行 ipa host-mod,并将 --sshpubkey= 设置为空白值;这将删除主机 的所有 公钥。此外,使用 --updatedns 选项更新主机的 DNS 条目。例如:
[jsmith@server ~]$ kinit admin
[jsmith@server ~]$ ipa host-mod --sshpubkey= --updatedns host1.example.com


[2] 如果密钥类型不包含在上传密钥中,则从密钥本身自动确定密钥类型。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.