Devops/Ansible

Windows에서 Ansible 사용하기

BabyTT 2019. 6. 25. 11:00

Windows서버에 원격으로 작업하기 위해서 WinRM 을 사용한다. WinRM은 SOAP 베이스 프로토콜로 HTTP/HTTPS로 통신하며 최신 Windows 운영체제 (Windows Server 2012부터 default enabled) 에서 사용가능하다.

Ansible은 pywinrm 패키지를 통하 WinRM을 사용하며 따로 설치해 주어야 한다. 

 

또, Ansible의 Windows 서버 인증을 위한 여러가지 방법이 있는데 여기서는 Domain 계정 접속을 위해 Kerberos 인증 방식을 사용하였다.

 

OptionLocal AccountsActive Directory AccountsCredential DelegationHTTP Encryption

Basic Yes No No No
Certificate Yes No No No
Kerberos No Yes Yes Yes
NTLM Yes Yes No Yes
CredSSP Yes Yes Yes Yes

 

Windows Host의 조건

$url = "https://raw.githubusercontent.com/jborean93/ansible-windows/master/scripts/Install-WMF3Hotfix.ps1"
$file = "$env:temp\Install-WMF3Hotfix.ps1"

(New-Object -TypeName System.Net.WebClient).DownloadFile($url, $file)
powershell.exe -ExecutionPolicy ByPass -File $file -Verbose

WinRM 셋팅 확인

  • WinRM 을 설정을 통해 Ansible이 접속할 수 있다.
  • Ansible이 Windows Host와 통신할 수 있는 두가지 컴포넌트
    • Listener
    • Service

WinRM Listener

winrm enumerate winrm/config/Listener
  • Port : (HTTP Defuault 5985)
  • URLPrefix : The URL prefix Default는 wsman/ 변경되면 host var인 ansible_winrm_path가 같은 값으로 수정되어야 한다.

WinRM Service Options

winrm get winrm/config/Service
winrm get winrm/config/Winrs
  • Service
    • AllowUnencrypted : WinRM이 HTTP를 통해 메세지 암호화 없이 통신하는 것을 허용하는 옵션 (Default false) WinRM 메세지를 디버깅하기 위해서는 true로 수정
    • Auth :  WinRM 을 위한 인증 옵션
    • CbtHardeningLevel : Channel binding token 설정, CBT는 HTTPS에서 NTLM이나 Kerberos로 접속할 경우만 사용. Ansible은 최근 NTLM 인증 방식을 사용하며 Kerberos를 CbtHardeningLeve = Strict로 사용 시 404 dpfjrk qkftodgksek.
      • NONE : not verified
      • Relaxed : verified but not required
      • Strict : verified and required
  •  Winrs
    • MaxShellRunTime : 원격 명령이 실행되는 최대 실행 시간 (밀리세컨)
    • MaxMemoryPerShellMB : Shell 당 메모리 할당 최대 크기 (Child Process 포함)
# Winrs\MaxShellRunTime 값 변경하기 예
Set-Item -Path WSMan:\localhost\Shell\MaxShellRunTime -Value 2147483647

Common WinRM Issues

# HTPP out 테스트
winrs -r:http://server:5985/wsman -u:Username -p:Password ipconfig

 

Windows Remote Management 

ANSIBLE이 설치된 서버에서 실행

 

Ansible pywinrm 설치

WinRM으로 Windows 서버와 통신하기 위해서는 pywinrm을 Ansible이 설치된 머신에 설치한다.

Pip install "pywinrm>=0.2.2"

 

OS 정보와 Ansible이 사용하는 Python Version 확인

ansible --version | grep "python version"

 

python-kerberos dependency 설치

# CentOS
Yum -y instll python-devel krb5-devel krb5-libs krb5-workstation

# Ubuntu
Sudo apt-get install python-dev libkrb5-dev krb5-user

 

python-kerberos 설치

Pip install pywinrm[kerberos]

 

Kerberos 설정 변경

/etc/krb5.conf 에서 접속하고자 하는 도메인 계정 정보에 맞게 설정

#/etc/krb5.conf

[realms]
mydomain.com = {
  kdc = dc1_host.mydomain.com
  kdc = dc2_host.mydomain.com
}

[domain_realm]
.mydomain.com = MYDOMAIN.COM
mydomain.com = MYDOMAIN.COM

 

인증 테스트 연결 티켓 확인

$ kinit domainuser@MYDOMAIN.COM
Password for domainuser@MYDOMAIN.COM:

$ klist
Ticket cache: KEYRING:persistent:10001:10001
Default principal: domainuser@MYDOMAIN.COM

Valid starting       Expires              Service principal
06/25/2019 10:19:16  06/25/2019 20:19:16  /MYDOMAIN.COM@MYDOMAIN.COM
        renew until 06/25/2019 20:19:16

 

Inventory 설정

	[win]
	userdomain.MYDOMAIN.COM
	
	[win:vars]
	ansible_user=domainuser@MYDOMAIN.COM
	ansible_password=비밀번호
	ansible_connection=winrm
	ansible_port=5985
	ansible_winrm_scheme=http
	ansible_winrm_transport=kerberos
	ansible_winrm_server_cert_validation=ignore
	ansible_become=false

 

/etc/hosts 설정

호스트명으로 연결하고자 할 때 해당 파일 수정

192.10.10.4 	userdomain.MYDOMAIN.COM

 

Ansible win_ping 실행

ansible win -i inventory -m win_ping

 

Ansible 결과 확인

userdomain.MYDOMAIN.COM | SUCCESS => {

    "changed": false,

    "ping": "pong"

}

Windows 서버에서 Windows 로그 > 보안 > 감사 성공 확인

 

 

참조 URL
https://docs.ansible.com/ansible/latest/user_guide/windows_setup.html

https://docs.ansible.com/ansible/latest/user_guide/windows_winrm.html

'Devops > Ansible' 카테고리의 다른 글

병렬 백업과 복원을 위한 async 작업  (0) 2022.08.30
MSSQL 별칭 관리  (0) 2022.08.30
[Ansible] SQL Server Uninstall  (0) 2019.10.11
Ansible : Public Key 자동 배포  (0) 2019.04.12
Ansible Roles  (0) 2019.04.12