Red Hat Training

A Red Hat training course is available for RHEL 8

2.2. 使用 sshd 系统角色配置 OpenSSH 服务器

您可以通过运行 Ansible playbook,使用 sshd 系统角色配置多个 SSH 服务器。

注意

您可以将 sshd 系统角色用于更改 SSH 和 SSHD 配置的其他系统角色,例如身份管理 RHEL 系统角色。要防止配置被覆盖,请确保 sshd 角色使用命名空间(RHEL 8 和更早的版本)或 drop-in 目录(RHEL 9)。

前提条件

  • 您已准备好控制节点和受管节点
  • 以可在受管主机上运行 playbook 的用户登录到控制节点。
  • 用于连接到受管节点的帐户具有 sudo 权限。
  • 要在其上运行此 playbook 的受管节点或受管节点组列在 Ansible 清单文件中。

流程

  1. 复制 sshd 系统角色的示例 playbook:

    # cp /usr/share/doc/rhel-system-roles/sshd/example-root-login-playbook.yml ~/sshd-playbook.yml
  2. 使用文本编辑器打开复制的 playbook,例如:

    # vim ~/sshd-playbook.yml
    
    ---
    - hosts: all
      tasks:
      - name: Configure sshd to prevent root and password login except from particular subnet
        include_role:
          name: rhel-system-roles.sshd
        vars:
          sshd:
            # root login and password login is enabled only from a particular subnet
            PermitRootLogin: no
            PasswordAuthentication: no
            Match:
            - Condition: "Address 192.0.2.0/24"
              PermitRootLogin: yes
              PasswordAuthentication: yes

    playbook 将受管节点配置为 SSH 服务器,以便:

    • 禁用密码和 root 用户登录
    • 只对子网 192.0.2.0/24 启用密码和 root 用户登录

    您可以根据您的偏好修改变量。如需了解更多详细信息,请参阅 sshd 系统角色变量

  3. 验证 playbook 语法:

    # ansible-playbook --syntax-check ~/sshd-playbook.yml

    请注意,这个命令只验证语法,不会防止错误但有效的配置。

  4. 运行 playbook:

    # ansible-playbook ~/sshd-playbook.yml
    
    ...
    
    PLAY RECAP
    **************************************************
    
    localhost : ok=12 changed=2 unreachable=0 failed=0
    skipped=10 rescued=0 ignored=0

验证

  1. 登录到 SSH 服务器:

    $ ssh user1@10.1.1.1

    其中:

    • user1 是 SSH 服务器上的用户。
    • 10.1.1.1 是 SSH 服务器的 IP 地址。
  2. 检查 SSH 服务器上的 sshd_config 文件的内容:

    $ cat /etc/ssh/sshd_config
    …
    PasswordAuthentication no
    PermitRootLogin no
    …
    Match Address 192.0.2.0/24
      PasswordAuthentication yes
      PermitRootLogin yes
    …
  3. 检查您是否可以以 root 用户身份从 192.0.2.0/24 子网连接到服务器:

    1. 确定您的 IP 地址:

      $ hostname -I
      192.0.2.1

      如果 IP 地址在 192.0.2.1 - 192.0.2.254 范围内,您可以连接到服务器。

    2. root 用户身份连接到服务器:

      $ ssh root@10.1.1.1

其他资源

  • /usr/share/doc/rhel-system-roles/sshd/README.md 文件。
  • ansible-playbook(1) 手册页。