willshersystems.sshd

OpenSSH 服务器

Ansible Lint Ansible Galaxy

此角色配置 OpenSSH 守护进程。它:

  • 默认使用操作系统的正常配置配置 SSH 守护进程。
  • 支持多种 UN*X 发行版。
  • 可以通过字典或简单变量进行配置。
  • 支持 Match 集合。
  • 支持所有 sshd_config 选项,模板是程序生成的。 (查看 meta/make_option_lists)
  • 在重新加载 sshd 之前会测试 sshd_config

警告 误配置此角色可能导致无法访问服务器! 请在生产环境中使用之前,测试您的配置及其与用户配置的交互。

警告 Digital Ocean 在 Debian 和 Ubuntu 上允许使用密码的 root 登录 SSH。这不是此模块的默认设置 - 它会将 PermitRootLogin 设置为 without-password,这将允许通过 SSH 密钥访问,但不允许使用简单密码。如果需要此功能,请确保在这些主机上设置 sshd_PermitRootLogin yes

要求

已在以下环境中测试:

  • Ubuntu precise, trusty, xenial, bionic, focal, jammy, noble
    • 在 Ubuntu 最新版上运行测试
  • Debian wheezy, jessie, stretch, buster, bullseye, bookworm
    • 在 Debian 上运行测试
  • EL 6, 7, 8, 9, 10 派生的发行版
    • 在 CentOS 上运行测试
  • 所有 Fedora 版本
    • 在最新 Fedora 上运行测试
  • 最新 Alpine
    • 在 Alpine 上运行测试
  • FreeBSD 10.1
  • OpenBSD 6.0
  • AIX 7.1, 7.2
  • OpenWrt 21.03

它可能在其他版本上也能正常工作,适当的 vars/ 文件的直接支持是受欢迎的。

可选要求

如果您希望使用此角色的高级功能,例如为您配置防火墙和 SELinux(主要是在使用自定义端口时有用),该角色需要在 meta/collection-requirements.yml 中指定的额外集合。这些不会自动安装。如果您想管理 rpm-ostree 系统,则需要额外的集合。您必须这样安装它们:

ansible-galaxy install -vv -r meta/collection-requirements.yml

有关更多信息,请参见下面的 sshd_manage_firewallsshd_manage_selinux 选项,以及 rpm-ostree 部分。此附加功能仅在基于 Red Hat 的 Linux 上受支持。

角色变量

主要角色变量

未配置时,此角色将提供一个匹配操作系统默认值的 sshd_config,不包括注释,顺序不同。

sshd_enable

如果设置为 false,则该角色将完全禁用。默认值为 true

sshd_skip_defaults

如果设置为 true,则不会应用默认值。这意味着您必须通过 sshd 字典或 sshd_Key 变量拥有完整的配置默认值。默认情况下为 false,除非设置了 sshd_config_namespace,或者 sshd_config_file 指向一个 drop-in 目录以避免递归包含。

sshd_manage_service

如果设置为 false,则服务/守护进程不会被 管理,即不会尝试在启动时启用或启动或重新加载服务。 默认值为 true,除非:在 docker 容器中运行(假设在构建阶段使用 ansible)或 AIX(Ansible 的 service 模块当前不支持 AIX 的 enabled)。

sshd_allow_reload

如果设置为 false,则在更改时不会重新加载 sshd。这有助于故障排除。如果您想应用更改的配置,必须手动重新加载 sshd。默认值与 sshd_manage_service 相同。 (在 AIX 上除外,sshd_manage_service 默认值为 false,但 sshd_allow_reload 默认值为 true

sshd_install_service

如果设置为 true,该角色将安装 SSH 服务的服务文件。默认值为 false

所使用服务文件的模板由以下变量指向:

  • sshd_service_template_service (默认值: templates/sshd.service.j2)
  • sshd_service_template_at_service (默认值: templates/[email protected])
  • sshd_service_template_socket (默认值: templates/sshd.socket.j2)

通过这些变量,您可以使用自己的自定义模板。使用上述默认模板,安装的 SSH 服务的名称将由 sshd_service 变量提供。

sshd_manage_firewall

如果设置为 true,防火墙将打开 SSH 端口。请注意,这仅对基于 Red Hat 的操作系统有效。默认值为 false

注意:sshd_manage_firewall 仅限于 添加 端口,不能用于 删除 端口。如果要删除端口,需要直接使用防火墙系统角色。

sshd_manage_selinux

如果设置为 true,则将配置 SELinux 以允许 sshd 在给定的 SSH 端口上监听。请注意,这仅对基于 Red Hat 的操作系统有效。默认值为 false

注意:sshd_manage_selinux 限制为 添加 策略,不能用于 删除 策略。如果要删除端口,需要直接使用 SELinux 系统角色。

sshd

包含配置的字典。例如:

sshd:
  Compression: delayed
  ListenAddress:
    - 0.0.0.0

sshd_<OptionName>

可以使用简单变量而不是字典。简单值可以覆盖字典值。例如:

sshd_Compression: off

在所有情况下,布尔值在 sshd 配置中将正确渲染为 yes 和 no。可以使用列表进行多行配置项。例如:

sshd_ListenAddress:
  - 0.0.0.0
  - '::'

将渲染为:

ListenAddress 0.0.0.0
ListenAddress ::

sshd_match, sshd_match_1 到 sshd_match_9

为 Match 部分提供的字典列表或仅一个字典。请注意,这些变量不会覆盖 sshd 字典中定义的 match 块。所有来源都将反映在生成的配置文件中。使用 sshd_match_* 变体已不再推荐。

sshd_backup

当设置为 false 时,原始的 sshd_config 文件将不被备份。默认值为 true

sshd_sysconfig

在基于 RHEL 的系统上,sysconfig 用于配置 sshd 服务的更多细节。如果设置为 true,该角色还将根据以下配置管理 /etc/sysconfig/sshd 配置文件。默认值为 false

sshd_sysconfig_override_crypto_policy

在基于 RHEL8 的系统上,这可以通过设置为 true 来覆盖系统范围的加密策略。如果没有此选项,则对密码、MAC 和公钥算法的更改不会对 RHEL8 中的服务产生影响。默认值为 false

sshd_sysconfig_use_strong_rng

在基于 RHEL 的系统上(RHEL9 之前),这可以强制 sshd 使用指定字节数的参数重新种子 openssl 随机数生成器。默认值为 0,这将禁用此功能。如果系统没有硬件随机数生成器,不推荐开启此选项。

sshd_config_file

此角色生成的 openssh 配置应保存的路径。这主要在生成配置片段以从 drop-in 目录包含时很有用(Fedora 和 RHEL9 的默认设置)。

当此路径指向一个 drop-in 目录时(如 /etc/ssh/sshd_config.d/00-custom.conf),检查主配置文件(由变量 sshd_main_config_file 定义)是否包含适当的 Include 指令。

sshd_main_config_file

在系统使用 drop-in 目录时,可以使用此选项设置主配置文件的路径,并让您仅使用 sshd_config_file 配置 drop-in 配置文件。这在需要配置第二个独立的 sshd 服务时很有用,其配置文件不同。这也是在服务文件中使用的文件。

在没有 drop-in 目录的系统上,默认值为 None。否则,默认值为 /etc/ssh/sshd_config。当 sshd_config_file 设置在 drop-in 目录之外(其父目录不是 sshd_main_config_file ~ '.d')时,将忽略此变量。

sshd_config_namespace

默认情况下(null),该角色定义配置文件的整个内容,包括系统默认值。您可以使用此变量从其他角色或在单个 playbook 的多个地方调用此角色,作为使用 drop-in 目录的替代方案。在这种情况下,将忽略 sshd_skip_defaults,并且不使用系统默认值。

当设置此变量时,角色将在给定命名空间下的现有配置文件中将指定的配置放置到配置片段中。您需要在多次调用角色时选择不同的命名空间。

请注意,openssh 配置文件的限制仍然适用。例如,配置文件中指定的第一个选项对大多数变量是有效的。

从技术上讲,角色将片段放置在 Match all 块中,除非它们包含其他匹配块,以确保它们在现有配置文件中的先前匹配块之前应用。这允许从不同角色调用中配置不冲突的任何选项。

sshd_config_owner, sshd_config_group, sshd_config_mode

使用这些变量来设置此角色生成的 openssh 配置文件的所有权和权限。

sshd_verify_hostkeys

默认情况下(auto),此列表包含生成的配置文件中存在的所有主机密钥。如果没有,将在 FIPS 模式下使用 OpenSSH 默认列表,排除不符合 FIPS 标准的密钥。检查路径的存在,如果缺少新密钥,则将生成。此外,权限和文件所有者设置为合理的默认值。如果在部署阶段使用此角色,这非常有用,以确保服务能够在第一次尝试时启动。

要禁用此检查,请将其设置为空列表。

sshd_hostkey_owner, sshd_hostkey_group, sshd_hostkey_mode

使用这些变量来设置上述列表中主机密钥的所有权和权限。

次要角色变量

这些变量由角色内部使用,并可以用来覆盖每个平台对应的默认值。它们未经过测试,并且通常不需要,因为角色会从操作系统类型中确定它们。

sshd_packages

使用此变量来覆盖要安装的默认软件包列表。

sshd_binary

openssh 可执行文件的路径。

sshd_service

openssh 服务的名称。默认情况下,此变量包含目标平台使用的 ssh 服务的名称。但当使用 sshd_install_service 变量时,也可以用来设置自定义 ssh 服务的名称。

sshd_sftp_server

sftp 服务器可执行文件的默认路径。

角色导出的变量

sshd_has_run

成功执行角色后,此变量被设置为 true

配置 SSH 证书身份验证

要在 SSH 服务器上配置 SSH 证书身份验证,您需要提供至少受信任的用户 CA 密钥,这些密钥将用于验证客户端证书。这通过变量 sshd_trusted_user_ca_keys_list 来完成。

如果您需要将某些授权主体映射到系统用户,可以使用 sshd_principals 变量做到这一点。

其他变量

sshd_trusted_user_ca_keys_list

受信任用户 CA 公钥的列表,以 OpenSSH 一行格式表示(必填)。

sshd_trustedusercakeys_directory_owner, sshd_trustedusercakeys_directory_group, sshd_trustedusercakeys_directory_mode

使用这些变量设置受信任用户 CA 密钥目录的所有权和权限。默认值分别为 rootroot0755

sshd_trustedusercakeys_file_owner, sshd_trustedusercakeys_file_group, sshd_trustedusercakeys_file_mode

使用这些变量设置受信任用户 CA 密钥文件的所有权和权限。默认值分别为 rootroot0640

sshd_principals

包含操作系统中用户主体的字典(可选)。例如:

sshd_principals:
  admin:
    - frontend-admin
    - backend-admin
  somelinuxuser:
    - some-principal-defined-in-certificate

sshd_authorizedprincipals_directory_owner, sshd_authorizedprincipals_directory_group, sshd_authorizedprincipals_directory_mode

使用这些变量设置授权主体目录的所有权和权限。默认值分别为 rootroot0755

sshd_authorizedprincipals_file_owner, sshd_authorizedprincipals_file_group, sshd_authorizedprincipals_file_mode

使用这些变量设置授权主体文件的所有权和权限。默认值分别为 rootroot0644

其他配置

SSH 服务器需要将此信息存储在文件中,因此除了上述变量外,执行角色时 sshd 字典中还需要存在相应的配置选项 TrustedUserCAKeys(必填)和 AuthorizedPrincipalsFile(可选)。例如:

sshd:
  TrustedUserCAKeys: /etc/ssh/path-to-trusted-user-ca-keys/trusted-user-ca-keys.pub
  AuthorizedPrincipalsFile: "/etc/ssh/path-to-auth-principals/auth_principals/%u"

要了解有关 SSH 证书的更多信息,可以参考 wikibooks 上的关于纯 SSH 证书的优质教程

要理解主体并使用 Vault 设置 SSH 证书,这是 Hashicorp 的一个很好解释的教程

依赖关系

对于测试,需要 ansible.posix 集合用于 mount 角色以模拟 FIPS 模式。

示例 Playbook

危险! 此示例用于显示该角色提供的配置范围。运行它可能会导致您无法访问服务器的 SSH!

---
- hosts: all
  vars:
    sshd_skip_defaults: true
    sshd:
      Compression: true
      ListenAddress:
        - "0.0.0.0"
        - "::"
      GSSAPIAuthentication: false
      Match:
        - Condition: "Group user"
          GSSAPIAuthentication: true
    sshd_UsePrivilegeSeparation: false
    sshd_match:
        - Condition: "Group xusers"
          X11Forwarding: true
  roles:
    - role: willshersystems.sshd

结果为:

# Ansible 管理: ...
Compression yes
GSSAPIAuthentication no
UsePrivilegeSeparation no
Match Group user
  GSSAPIAuthentication yes
Match Group xusers
  X11Forwarding yes

自 Ansible 2.4 以来,可以使用 include_role 关键字调用该角色,例如:

---
- hosts: all
  become: true
  tasks:
  - name: "配置 sshd"
    include_role:
      name: willshersystems.sshd
    vars:
      sshd_skip_defaults: true
      sshd:
        Compression: true
        ListenAddress:
          - "0.0.0.0"
          - "::"
        GSSAPIAuthentication: false
        Match:
          - Condition: "Group user"
            GSSAPIAuthentication: true
      sshd_UsePrivilegeSeparation: false
      sshd_match:
          - Condition: "Group xusers"
            X11Forwarding: true

您可以仅使用 sshd_config_namespace 选项添加配置片段:

---
- hosts: all
  tasks:
  - name: 配置 sshd 接受一些有用的环境变量
    include_role:
      name: willshersystems.sshd
    vars:
      sshd_config_namespace: accept-env
      sshd:
        # 有一些方便的环境变量需要接受
        AcceptEnv:
          LANG
          LS_COLORS
          EDITOR

下面的片段将被添加到默认配置文件中(如果尚不存在):

# BEGIN sshd 系统角色管理块: 命名空间 accept-env
Match all
  AcceptEnv LANG LS_COLORS EDITOR
# END sshd 系统角色管理块: 命名空间 accept-env

更多示例 playbook 可在 examples/ 目录中找到。

模板生成

sshd_config.j2sshd_config_snippet.j2 模板是通过 meta 中的脚本程序生成的。新选项应添加到 options_body 和/或 options_match 中。

要重新生成模板,请在 meta/ 目录中运行: ./make_option_lists

rpm-ostree

请参见 README-ostree.md

许可证

LGPLv3

作者

Matt Willsher matt@willsher.systems

© 2014,2015 Willsher Systems Ltd.

Jakub Jelen jjelen@redhat.com

© 2020 - 2024 Red Hat, Inc.

安装
ansible-galaxy install willshersystems.sshd
许可证
lgpl-3.0
下载
321.8k
拥有者
Cloud Architecture & Automation