12.2. sshd 시스템 역할을 사용하여 OpenSSH 서버 구성

Ansible 플레이북을 실행하여 sshd 시스템 역할을 사용하여 여러 SSH 서버를 구성할 수 있습니다.

참고

SSH 및 SSHD 구성을 변경하는 다른 시스템 역할(예: Identity Management RHEL 시스템 역할)과 함께 sshd 시스템 역할을 사용할 수 있습니다. 구성을 덮어쓰지 않으려면 sshd 역할에서 네임스페이스(RHEL 8 및 이전 버전) 또는 드롭인 디렉터리(RHEL 9)를 사용하는지 확인합니다.

사전 요구 사항

  • sshd 시스템 역할로 구성하려는 시스템인 하나 이상의 관리형 노드에 대한 액세스 및 권한.
  • Red Hat Ansible Core가 기타 시스템을 구성하는 시스템인 제어 노드 액세스 및 사용 권한.

    제어 노드에서 다음이 있어야 합니다.

    • ansible-corerhel-system-roles 패키지가 설치됩니다.
중요

RHEL 8.0-8.5는 Ansible 기반 자동화를 위해 Ansible Engine 2.9가 포함된 별도의 Ansible 리포지토리에 대한 액세스를 제공했습니다. Ansible Engine에는 ansible , ansible -playbook, dockerpodman 과 같은 커넥터, 여러 플러그인 및 모듈과 같은 명령줄 유틸리티가 포함되어 있습니다. Ansible Engine을 확보하고 설치하는 방법에 대한 자세한 내용은 Red Hat Ansible Engine 지식베이스를 다운로드하고 설치하는 방법 문서를 참조하십시오.

RHEL 8.6 및 9.0에서는 Ansible 명령줄 유틸리티, 명령 및 소규모의 기본 제공 Ansible 플러그인 세트가 포함된 Ansible Core( ansible-core 패키지로 제공)를 도입했습니다. RHEL은 AppStream 리포지토리를 통해 이 패키지를 제공하며 제한된 지원 범위를 제공합니다. 자세한 내용은 RHEL 9 및 RHEL 8.6 이상 AppStream 리포지토리 지식 베이스에 포함된 Ansible Core 패키지에 대한 지원 범위를 참조하십시오.

  • 관리 노드를 나열하는 인벤토리 파일.

절차

  1. sshd 시스템 역할에 대한 예제 플레이북을 복사합니다.

    # cp /usr/share/doc/rhel-system-roles/sshd/example-root-login-playbook.yml path/custom-playbook.yml
  2. 텍스트 편집기를 사용하여 복사된 플레이북을 엽니다. 예를 들면 다음과 같습니다.

    # 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

    플레이북은 다음을 수행하도록 구성된 SSH 서버로 관리 노드를 구성합니다.

    • 암호 및 root 사용자 로그인이 비활성화되어 있습니다
    • 암호 및 root 사용자 로그인은 서브넷 192.0.2.0/24에서만 활성화됩니다.

    환경 설정에 따라 변수를 수정할 수 있습니다. 자세한 내용은 SSH Server 시스템 역할 변수를 참조하십시오.

  3. 선택 사항: 플레이북 구문을 확인합니다.

    # ansible-playbook --syntax-check path/custom-playbook.yml
  4. 인벤토리 파일에서 플레이북을 실행합니다.

    # 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. 192.0.2.0/24 서브넷에서 root로 서버에 연결할 수 있는지 확인합니다.

    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) 도움말 페이지