1.8. ssh 시스템 역할과 보안 통신 구성
관리자는 sshd
시스템 역할을 사용하여 SSH 서버와 ssh
시스템 역할을 구성하여 Ansible Core 패키지를 사용하여 여러 RHEL 시스템에서 동시에 SSH 클라이언트를 일관되게 구성할 수 있습니다.
1.8.1. sshd
RHEL 시스템 역할의 변수
sshd
시스템 역할 플레이북에서는 환경 설정 및 제한 사항에 따라 SSH 구성 파일의 매개변수를 정의할 수 있습니다.
이러한 변수를 구성하지 않으면 시스템 역할은 RHEL 기본값과 일치하는 sshd_config
파일을 생성합니다.
모든 경우에 부울이 sshd
구성에서 yes
및 no
로 올바르게 렌더링됩니다. 목록을 사용하여 여러 줄 구성 항목을 정의할 수 있습니다. 예를 들면 다음과 같습니다.
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)를 사용하는지 확인합니다.
사전 요구 사항
- 컨트롤 노드 및 관리형 노드를 준비했습니다.
- 관리 노드에서 플레이북을 실행할 수 있는 사용자로 제어 노드에 로그인되어 있습니다.
-
관리 노드에 연결하는 데 사용하는 계정에는
sudo
권한이 있습니다.
절차
다음 콘텐츠를 사용하여 플레이북 파일(예:
~/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
에서만 활성화됩니다.
-
암호 및
플레이북 구문을 확인합니다.
$ ansible-playbook --syntax-check ~/playbook.yml
이 명령은 구문만 검증하고 잘못되었지만 유효한 구성으로부터 보호하지 않습니다.
Playbook을 실행합니다.
$ ansible-playbook ~/playbook.yml
검증
SSH 서버에 로그인합니다.
$ ssh <username>@<ssh_server>
SSH 서버에서
sshd_config
파일의 내용을 확인합니다.$ cat /etc/ssh/sshd_config.d/00-ansible_system_role.conf # # Ansible managed # PasswordAuthentication no PermitRootLogin no Match Address 192.0.2.0/24 PasswordAuthentication yes PermitRootLogin yes
192.0.2.0/24
서브넷에서 root로 서버에 연결할 수 있는지 확인합니다.IP 주소를 확인합니다.
$ hostname -I 192.0.2.1
IP 주소가
192.0.2.1
-192.0.2.254
범위 내에 있는 경우 서버에 연결할 수 있습니다.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 이상에서 기본값)를 사용해야 합니다.
사전 요구 사항
- 컨트롤 노드 및 관리형 노드를 준비했습니다.
- 관리 노드에서 플레이북을 실행할 수 있는 사용자로 제어 노드에 로그인되어 있습니다.
-
관리 노드에 연결하는 데 사용하는 계정에는
sudo
권한이 있습니다.
절차
다음 콘텐츠를 사용하여 플레이북 파일(예:
~/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
.comuser1
입니다. -
예제
호스트 별칭이 생성되며, 이 별칭은user1
사용자 이름으로 을 호스팅하는server.example.com
에 대한 연결을 나타냅니다. - X11 전달이 비활성화되어 있습니다.
플레이북 구문을 확인합니다.
$ ansible-playbook --syntax-check ~/playbook.yml
이 명령은 구문만 검증하고 잘못되었지만 유효한 구성으로부터 보호하지 않습니다.
Playbook을 실행합니다.
$ 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
로 배치되어 있습니다.
사전 요구 사항
- 컨트롤 노드 및 관리형 노드를 준비했습니다.
- 관리 노드에서 플레이북을 실행할 수 있는 사용자로 제어 노드에 로그인되어 있습니다.
-
관리 노드에 연결하는 데 사용하는 계정에는
sudo
권한이 있습니다.
절차
다음 콘텐츠를 사용하여 플레이북 파일(예:
~/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-
)를 사용하여 구성 파일을 적용할 순서를 지정합니다.
플레이북 구문을 확인합니다.
$ ansible-playbook --syntax-check ~/playbook.yml
이 명령은 구문만 검증하고 잘못되었지만 유효한 구성으로부터 보호하지 않습니다.
Playbook을 실행합니다.
$ 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/
디렉터리