1.8. ssh 시스템 역할과 보안 통신 구성
관리자는 sshd
시스템 역할을 사용하여 SSH 서버와 ssh
시스템 역할을 구성하여 Red Hat Ansible Automation Platform을 사용하여 여러 RHEL 시스템에서 동시에 SSH 클라이언트를 일관되게 구성할 수 있습니다.
1.8.1. sshd
RHEL 시스템 역할이 플레이북의 설정을 구성 파일로 매핑하는 방법
sshd
RHEL 시스템 역할 플레이북에서는 서버 SSH 구성 파일의 매개 변수를 정의할 수 있습니다.
이러한 설정을 지정하지 않으면 역할은 RHEL 기본값과 일치하는 sshd_config
파일을 생성합니다.
모든 경우에 부울은 관리 노드의 최종 구성에서 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 시스템 역할을 사용하여 여러 OpenSSH 서버를 구성할 수 있습니다. 이렇게 하면 이름별로 제공하여 원격 사용자를 위한 보안 통신 환경이 보장됩니다.
- 원격 클라이언트에서 들어오는 SSH 연결 관리
- 인증 정보 확인
- 안전한 데이터 전송 및 명령 실행
SSHD 구성을 변경하는 다른 RHEL 시스템 역할과 함께 sshd
RHEL 시스템 역할을 사용할 수 있습니다(예: Identity Management RHEL 시스템 역할). 구성을 덮어쓰지 않도록 sshd
RHEL 시스템 역할은 네임스페이스(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
예제 플레이북에 지정된 설정은 다음과 같습니다.
PasswordAuthentication: yes|no
-
OpenSSH 서버(
sshd
)가 사용자 이름과 암호 조합을 사용하는 클라이언트의 인증을 수락하는지 여부를 제어합니다. 일치:
-
match 블록은
루트
사용자가 서브넷192.0.2.0/24
에서만 암호를 사용하여 로그인할 수 있도록 허용합니다.
플레이북에 사용된 역할 변수 및 OpenSSH 구성 옵션에 대한 자세한 내용은 제어 노드의
/usr/share/ansible/roles/rhel-system-roles.sshd/README.md
파일 및sshd_config(5)
매뉴얼 페이지를 참조하십시오.플레이북 구문을 확인합니다.
$ ansible-playbook --syntax-check ~/playbook.yml
이 명령은 구문만 검증하고 잘못되었지만 유효한 구성으로부터 보호하지 않습니다.
플레이북을 실행합니다.
$ ansible-playbook ~/playbook.yml
검증
SSH 서버에 로그인합니다.
$ ssh <username>@<ssh_server>
SSH 서버에서
sshd_config
파일의 내용을 확인합니다.$ cat /etc/ssh/sshd_config ... 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
RHEL 시스템 역할 플레이북에서는 클라이언트 SSH 구성 파일의 매개변수를 정의할 수 있습니다.
이러한 설정을 지정하지 않으면 역할은 RHEL 기본값과 일치하는 글로벌 ssh_config
파일을 생성합니다.
모든 경우에 부울이 관리형 노드의 최종 구성에서 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 시스템 역할을 사용하여 여러 OpenSSH 클라이언트를 구성할 수 있습니다. 이를 통해 로컬 사용자는 이름을 확인하여 원격 OpenSSH 서버와의 보안 연결을 설정할 수 있습니다.
- 보안 연결 시작
- 인증 정보 프로비저닝
- 보안 통신 채널에 사용되는 암호화 방법의 OpenSSH 서버와의 협상
- OpenSSH 서버로 파일을 안전하게 보낼 수 있는 기능
SSH 구성을 변경하는 다른 시스템 역할과 함께 ssh
RHEL 시스템 역할을 사용할 수 있습니다(예: Identity Management RHEL 시스템 역할). 구성을 덮어쓰지 않도록 하려면 ssh
RHEL 시스템 역할에 드롭인 디렉터리(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
예제 플레이북에 지정된 설정은 다음과 같습니다.
ssh_user: root
-
특정 구성 관련 정보를 사용하여 관리 노드에서
root
사용자의 SSH 클라이언트 기본 설정을 구성합니다. 압축: true
- 압축이 활성화됩니다.
ControlMaster: auto
-
ControlMaster 멀티플렉싱이
auto
로 설정되어 있습니다. 호스트
-
user1
이라는 사용자로server.
호스트에 연결하기 위한 별칭 예제를 생성합니다.example
.com ssh_ForwardX11: no
- X11 전달이 비활성화되어 있습니다.
플레이북에 사용된 역할 변수 및 OpenSSH 구성 옵션에 대한 자세한 내용은 제어 노드의
/usr/share/ansible/roles/rhel-system-roles.ssh/README.md
파일 및ssh_config(5)
매뉴얼 페이지를 참조하십시오.플레이북 구문을 확인합니다.
$ ansible-playbook --syntax-check ~/playbook.yml
이 명령은 구문만 검증하고 잘못되었지만 유효한 구성으로부터 보호하지 않습니다.
플레이북을 실행합니다.
$ 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/
디렉터리 -
ssh_config(5)
manual page
1.8.5. 비독점 구성에 sshd
RHEL 시스템 역할 사용
기본적으로 sshd
RHEL 시스템 역할을 적용하면 전체 구성을 덮어씁니다. 이전에 다른 RHEL 시스템 역할 또는 플레이북과 같은 구성을 조정한 경우 문제가 있을 수 있습니다. 다른 옵션을 유지하면서 선택한 구성 옵션에 대해서만 sshd
RHEL 시스템 역할을 적용하려면 제외된 구성을 사용할 수 있습니다.
포함되지 않은 구성을 적용할 수 있습니다.
- 구성 스니펫을 사용하여 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 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 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_namespace: <my-application>
- 역할은 플레이북에 지정하는 구성을 지정된 네임스페이스 아래에 있는 기존 구성 파일의 구성 스니펫에 배치합니다. 다른 컨텍스트에서 역할을 실행할 때 다른 네임스페이스를 선택해야 합니다.
sshd_config_file: /etc/ssh/sshd_config.d/<42-my-application>.conf
-
sshd_config_file
변수에서sshd
시스템 역할이 구성 옵션을 쓰는.conf
파일을 정의합니다. 두 자리 접두사(예:42-
)를 사용하여 구성 파일을 적용할 순서를 지정합니다. AcceptEnv:
OpenSSH 서버(
sshd
)가 클라이언트에서 허용할 환경 변수를 제어합니다.-
LANG
: 언어 및 로케일 설정을 정의합니다. -
LS_COLORS
: 터미널에서ls
명령에 대한 표시 색상 체계를 정의합니다. -
EDITOR
: 편집기를 열어야 하는 명령줄 프로그램의 기본 텍스트 편집기를 지정합니다.
-
플레이북에 사용된 역할 변수 및 OpenSSH 구성 옵션에 대한 자세한 내용은 제어 노드의
/usr/share/ansible/roles/rhel-system-roles.sshd/README.md
파일 및sshd_config(5)
매뉴얼 페이지를 참조하십시오.
플레이북 구문을 확인합니다.
$ ansible-playbook --syntax-check ~/playbook.yml
이 명령은 구문만 검증하고 잘못되었지만 유효한 구성으로부터 보호하지 않습니다.
플레이북을 실행합니다.
$ ansible-playbook ~/playbook.yml
검증
SSH 서버의 구성을 확인합니다.
RHEL 8 이상을 실행하는 관리형 노드의 경우:
# 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>
RHEL 9 이상을 실행하는 관리형 노드의 경우:
# cat /etc/ssh/sshd_config.d/42-my-application.conf # Ansible managed # AcceptEnv LANG LS_COLORS EDITOR
추가 리소스
-
/usr/share/ansible/roles/rhel-system-roles.sshd/README.md
파일 -
/usr/share/doc/rhel-system-roles/sshd/
디렉터리 -
sshd_config(5)
manual page