1.8. ssh 시스템 역할과 보안 통신 구성


관리자는 sshd 시스템 역할을 사용하여 SSH 서버와 ssh 시스템 역할을 구성하여 Red Hat Ansible Automation Platform을 사용하여 여러 RHEL 시스템에서 동시에 SSH 클라이언트를 일관되게 구성할 수 있습니다.

1.8.1. sshd RHEL 시스템 역할의 변수

sshd 시스템 역할 플레이북에서는 환경 설정 및 제한 사항에 따라 SSH 구성 파일의 매개변수를 정의할 수 있습니다.

이러한 변수를 구성하지 않으면 시스템 역할은 RHEL 기본값과 일치하는 sshd_config 파일을 생성합니다.

모든 경우에 부울이 sshd 구성에서 yesno로 올바르게 렌더링됩니다. 목록을 사용하여 여러 줄 구성 항목을 정의할 수 있습니다. 예를 들면 다음과 같습니다.

sshd_ListenAddress:
  - 0.0.0.0
  - '::'

다음과 같이 렌더링됩니다.

ListenAddress 0.0.0.0
ListenAddress ::

추가 리소스

  • /usr/share/ansible/roles/rhel-system-roles.sshd/README.md 파일
  • /usr/share/doc/rhel-system-roles/sshd/ 디렉터리

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

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

참고

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

사전 요구 사항

절차

  1. 다음 콘텐츠를 사용하여 플레이북 파일(예: ~/playbook.yml )을 생성합니다.

    ---
    - name: SSH server configuration
      hosts: managed-node-01.example.com
      tasks:
        - name: Configure sshd to prevent root and password login except from particular subnet
          ansible.builtin.include_role:
            name: rhel-system-roles.sshd
          vars:
            sshd:
              PermitRootLogin: no
              PasswordAuthentication: no
              Match:
                - Condition: "Address 192.0.2.0/24"
                  PermitRootLogin: yes
                  PasswordAuthentication: yes

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

    • 암호 및 root 사용자 로그인이 비활성화되어 있습니다
    • 암호 및 root 사용자 로그인은 서브넷 192.0.2.0/24에서만 활성화됩니다.
  2. 플레이북 구문을 확인합니다.

    $ ansible-playbook --syntax-check ~/playbook.yml

    이 명령은 구문만 검증하고 잘못되었지만 유효한 구성으로부터 보호하지 않습니다.

  3. 플레이북을 실행합니다.

    $ ansible-playbook ~/playbook.yml

검증

  1. SSH 서버에 로그인합니다.

    $ ssh <username>@<ssh_server>
  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. 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@<ssh_server>

추가 리소스

  • /usr/share/ansible/roles/rhel-system-roles.sshd/README.md 파일
  • /usr/share/doc/rhel-system-roles/sshd/ 디렉터리

1.8.3. ssh RHEL 시스템 역할의 변수

ssh 시스템 역할 플레이북에서는 환경 설정 및 제한 사항에 따라 클라이언트 SSH 구성 파일의 매개 변수를 정의할 수 있습니다.

이러한 변수를 구성하지 않으면 시스템 역할은 RHEL 기본값과 일치하는 글로벌 ssh_config 파일을 생성합니다.

모든 경우에 부울이 ssh 구성에서 yes 또는 no 로 올바르게 렌더링됩니다. 목록을 사용하여 여러 줄 구성 항목을 정의할 수 있습니다. 예를 들면 다음과 같습니다.

LocalForward:
  - 22 localhost:2222
  - 403 localhost:4003

다음과 같이 렌더링됩니다.

LocalForward 22 localhost:2222
LocalForward 403 localhost:4003
참고

구성 옵션은 대소문자를 구분합니다.

추가 리소스

  • /usr/share/ansible/roles/rhel-system-roles.ssh/README.md 파일
  • /usr/share/doc/rhel-system-roles/ssh/ 디렉터리

1.8.4. ssh RHEL 시스템 역할을 사용하여 OpenSSH 클라이언트 구성

ssh RHEL 시스템 역할을 사용하여 Ansible 플레이북을 실행하여 여러 SSH 클라이언트를 구성할 수 있습니다.

참고

SSH 및 SSHD 구성을 변경하는 다른 시스템 역할(예: Identity Management RHEL 시스템 역할)과 함께 ssh RHEL 시스템 역할을 사용할 수 있습니다. 구성을 덮어쓰지 않도록 하려면 ssh 역할에 드롭인 디렉터리(RHEL 8 이상에서 기본값)를 사용해야 합니다.

사전 요구 사항

절차

  1. 다음 콘텐츠를 사용하여 플레이북 파일(예: ~/playbook.yml )을 생성합니다.

    ---
    - name: SSH client configuration
      hosts: managed-node-01.example.com
      tasks:
        - name: "Configure ssh clients"
          ansible.builtin.include_role:
            name: rhel-system-roles.ssh
          vars:
            ssh_user: root
            ssh:
              Compression: true
              GSSAPIAuthentication: no
              ControlMaster: auto
              ControlPath: ~/.ssh/.cm%C
              Host:
                - Condition: example
                  Hostname: server.example.com
                  User: user1
            ssh_ForwardX11: no

    이 플레이북은 다음 구성을 사용하여 관리 노드에서 root 사용자의 SSH 클라이언트 기본 설정을 구성합니다.

    • 압축이 활성화됩니다.
    • ControlMaster 멀티플렉싱이 auto 로 설정되어 있습니다.
    • server. example.com 호스트에 연결하는 예제 별칭은 user1 입니다.
    • 예제 호스트 별칭이 생성되며, 이 별칭은 user1 사용자 이름으로 을 호스팅하는 server.example.com 에 대한 연결을 나타냅니다.
    • X11 전달이 비활성화되어 있습니다.
  2. 플레이북 구문을 확인합니다.

    $ ansible-playbook --syntax-check ~/playbook.yml

    이 명령은 구문만 검증하고 잘못되었지만 유효한 구성으로부터 보호하지 않습니다.

  3. 플레이북을 실행합니다.

    $ ansible-playbook ~/playbook.yml

검증

  • SSH 구성 파일을 표시하여 관리 노드에 올바른 구성이 있는지 확인합니다.

    # cat ~/root/.ssh/config
    # Ansible managed
    Compression yes
    ControlMaster auto
    ControlPath ~/.ssh/.cm%C
    ForwardX11 no
    GSSAPIAuthentication no
    Host example
      Hostname example.com
      User user1

추가 리소스

  • /usr/share/ansible/roles/rhel-system-roles.ssh/README.md 파일
  • /usr/share/doc/rhel-system-roles/ssh/ 디렉터리

1.8.5. 비독점 구성에 sshd RHEL 시스템 역할 사용

일반적으로 sshd 시스템 역할을 적용하면 전체 구성을 덮어씁니다. 이전에 구성을 조정한 경우(예: 다른 시스템 역할 또는 플레이북)를 사용하는 경우 문제가 있을 수 있습니다. 다른 옵션을 그대로 유지하면서 선택한 구성 옵션에 대해서만 sshd 시스템 역할을 적용하려면 제외된 구성을 사용할 수 있습니다.

포함되지 않은 구성을 적용할 수 있습니다.

  • 구성 스니펫을 사용하여 RHEL 8 및 이전 버전에서.
  • 드롭인 디렉터리에서 파일을 사용하여 RHEL 9 이상에서 다음을 수행합니다. 기본 구성 파일은 드롭인 디렉터리에 이미 /etc/ssh/sshd_config.d/00-ansible_system_role.conf 로 배치되어 있습니다.

사전 요구 사항

절차

  1. 다음 콘텐츠를 사용하여 플레이북 파일(예: ~/playbook.yml )을 생성합니다.

    • RHEL 8 이상을 실행하는 관리형 노드의 경우:

      ---
      - name: Non-exclusive sshd configuration
        hosts: managed-node-01.example.com
        tasks:
          - name: <Configure SSHD to accept some useful environment variables>
            ansible.builtin.include_role:
              name: rhel-system-roles.sshd
            vars:
              sshd_config_namespace: <my-application>
              sshd:
                # Environment variables to accept
                AcceptEnv:
                  LANG
                  LS_COLORS
                  EDITOR
    • RHEL 9 이상을 실행하는 관리형 노드의 경우:

      - name: Non-exclusive sshd configuration
        hosts: managed-node-01.example.com
        tasks:
          - name: <Configure sshd to accept some useful environment variables>
            ansible.builtin.include_role:
              name: rhel-system-roles.sshd
            vars:
              sshd_config_file: /etc/ssh/sshd_config.d/<42-my-application>.conf
              sshd:
                # Environment variables to accept
                AcceptEnv:
                  LANG
                  LS_COLORS
                  EDITOR

      sshd_config_file 변수에서 sshd 시스템 역할이 구성 옵션을 쓰는 .conf 파일을 정의합니다. 두 자리 접두사(예: 42- )를 사용하여 구성 파일을 적용할 순서를 지정합니다.

  2. 플레이북 구문을 확인합니다.

    $ ansible-playbook --syntax-check ~/playbook.yml

    이 명령은 구문만 검증하고 잘못되었지만 유효한 구성으로부터 보호하지 않습니다.

  3. 플레이북을 실행합니다.

    $ ansible-playbook ~/playbook.yml

검증

  • SSH 서버의 구성을 확인합니다.

    • RHEL 8 이상을 실행하는 관리형 노드의 경우:

      # cat /etc/ssh/sshd_config.d/42-my-application.conf
      # Ansible managed
      #
      AcceptEnv LANG LS_COLORS EDITOR
    • RHEL 9 이상을 실행하는 관리형 노드의 경우:

      # cat /etc/ssh/sshd_config
      ...
      # BEGIN sshd system role managed block: namespace <my-application>
      Match all
        AcceptEnv LANG LS_COLORS EDITOR
      # END sshd system role managed block: namespace <my-application>

추가 리소스

  • /usr/share/ansible/roles/rhel-system-roles.sshd/README.md 파일
  • /usr/share/doc/rhel-system-roles/sshd/ 디렉터리
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.