IT 끄적이기

Ansible에서 WinRM HTTPS 및 인증서 설정 방법

미르아 2025. 1. 8. 11:43
728x90

Ansible을 사용해 Windows PC를 관리하려면 WinRM(Windows Remote Management)을 설정해야 합니다. 기본적으로 HTTP를 사용하는 WinRM도 가능하지만, 보안을 위해 HTTPS를 사용하는 것을 권장합니다. 아래는 HTTPS 설정 방법과 인증서 발급 및 적용 방법을 정리한 내용입니다.


WinRM HTTPS 설정

HTTPS를 설정하려면 인증서를 발급받아 WinRM에 적용해야 합니다.

Windows에서 WinRM 서비스 활성화

# WinRM 서비스 활성화
winrm quickconfig

# WinRM HTTPS 리스너 추가
winrm create winrm/config/Listener?Address=*+Transport=HTTPS @{Hostname="machine_name";CertificateThumbprint="CERT_THUMBPRINT"}

방화벽 규칙 추가

HTTPS는 기본적으로 5986 포트를 사용합니다. 방화벽에서 해당 포트를 허용해야 합니다.

# 5986 포트 허용
New-NetFirewallRule -Name "WinRM HTTPS" -DisplayName "WinRM HTTPS" -Enabled True -Direction Inbound -Protocol TCP -LocalPort 5986 -Action Allow

SSL 인증서 발급 및 적용

WinRM HTTPS 설정 시 인증서가 필요합니다. 자체 서명 인증서를 생성하거나 인증 기관(CA)에서 발급받을 수 있습니다.

자체 서명 인증서 생성 (테스트용)

# 자체 서명 인증서 생성
$cert = New-SelfSignedCertificate -DnsName "machine_name" -CertStoreLocation Cert:\LocalMachine\My

# Thumbprint 확인
$cert.Thumbprint

인증서 Thumbprint 적용

위에서 생성한 인증서의 Thumbprint를 WinRM HTTPS 리스너에 추가합니다.

# 인증서 Thumbprint 적용
winrm create winrm/config/Listener?Address=*+Transport=HTTPS @{Hostname="machine_name";CertificateThumbprint="CERT_THUMBPRINT"}

외부 CA 인증서 사용

외부 CA에서 인증서를 발급받았다면, 인증서를 Windows에 설치하고 Thumbprint를 동일하게 적용합니다.

# 인증서 설치
certutil -addstore -f "Root" "C:\path\to\certificate.cer"

# Thumbprint 적용
winrm create winrm/config/Listener?Address=*+Transport=HTTPS @{Hostname="machine_name";CertificateThumbprint="CERT_THUMBPRINT"}

WinRM HTTPS 설정 확인

설정을 확인하여 HTTPS 리스너가 제대로 활성화되었는지 점검합니다.

# WinRM 리스너 확인
winrm enumerate winrm/config/Listener

# 결과 예시
Listener [Source="GPO"]
    Address = *
    Transport = HTTPS
    Port = 5986
    Hostname = machine_name
    CertificateThumbprint = CERT_THUMBPRINT
    ListeningOn = [::], 0.0.0.0

Ansible에서 WinRM HTTPS 사용

Ansible에서 HTTPS로 WinRM을 사용하려면 아래처럼 설정합니다.

Inventory 파일 예시

[windows]
192.168.0.20 ansible_port=5986 ansible_user=Administrator ansible_password=Password123 ansible_connection=winrm ansible_winrm_transport=basic ansible_winrm_scheme=https

WinRM Python 패키지 설치

Ansible의 WinRM 모듈은 pywinrm 패키지를 필요로 합니다.

pip install pywinrm[credssp] pywinrm[kerberos] pywinrm[ntlm]

Ansible 명령 테스트

ansible -i inventory windows -m win_ping

문제 해결

  • SSL 인증서 오류: 인증서 검증을 우회하려면 ansible_winrm_cert_validation=ignore를 설정합니다.
[windows]
192.168.0.20 ansible_port=5986 ansible_user=Administrator ansible_password=Password123 ansible_connection=winrm ansible_winrm_transport=basic ansible_winrm_scheme=https ansible_winrm_cert_validation=ignore
  • 리스너가 설정되지 않음: WinRM 리스너 설정을 확인하고, 인증서 Thumbprint가 올바른지 다시 확인하세요.

요약

  1. WinRM HTTPS 리스너를 설정하고 인증서를 적용합니다.
  2. Ansible Inventory 파일에서 HTTPS와 관련된 설정을 추가합니다.
  3. Ansible 명령을 실행하여 연결을 테스트합니다.
728x90