Red Hat Training

A Red Hat training course is available for RHEL 8

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

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

先决条件

  • 访问一个或多个 受管节点,它们是您要使用 SSHD 系统角色配置的系统。
  • 对控制节点的访问和权限,这是 Red Hat Ansible Engine 配置其他系统的系统。

    在控制节点上:

    • 已安装 Red Hat Ansible Engine。
    • 已安装 rhel-system-roles 软件包。
    • 列出受管节点的清单文件。

流程

  1. 为 SSHD 系统角色复制示例 playbook:

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

    # vim path/custom-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 path/custom-playbook.yml
  4. 在清单文件上运行 playbook:

    # ansible-playbook -i inventory_file path/custom-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 文件的内容:

    $ vim /etc/ssh/sshd_config
    
    # Ansible managed
    HostKey /etc/ssh/ssh_host_rsa_key
    HostKey /etc/ssh/ssh_host_ecdsa_key
    HostKey /etc/ssh/ssh_host_ed25519_key
    AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
    AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
    AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
    AcceptEnv XMODIFIERS
    AuthorizedKeysFile .ssh/authorized_keys
    ChallengeResponseAuthentication no
    GSSAPIAuthentication yes
    GSSAPICleanupCredentials no
    PasswordAuthentication no
    PermitRootLogin no
    PrintMotd no
    Subsystem sftp /usr/libexec/openssh/sftp-server
    SyslogFacility AUTHPRIV
    UsePAM yes
    X11Forwarding yes
    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 file.
  • ansible-playbook(1) man page.