Ansible

Ansible Windows 서버 파일 배포

김모우 2021. 1. 30. 20:15
728x90
반응형

 

 

 

Ansible을 이용하여 Windows 서버에 파일을 배포하는 방법에 대해서 알아보겠습니다.

Ansible에서 Windows 서버 통신을 위해 Winrm이라는 모듈을 사용하며 Python에 pywinrm 라이브러리를 Install 하는 작업이 필요합니다. 

 

 

** OS 환경: Ansilbe 서버(Ubuntu 18.04) / Windows 서버(Windows 2019)

 

 

1. Winrm 동작 상태 확인

 

- Windows 서버 접속 후에 WInrm 서비스가 동작 중인지 먼저 확인하겠습니다.
- 실행->Services.msc 접속 후 아래와 같이 Winrm 서비스가 실행 중인지 체크해주세요


- Linux 서버와 통신 상태 확인
- https: 5986 / http: 5985 -> HTTPS 작업을 위해서는 Windows 서버에서 별도의 작업이 필요합니다.
- 저는 http를 이용하여 작업할 예정이므로 5985 포트 통신이 가능한 지 확인합니다.
- 아래와 같이 netstat, nc 명령어를 사용해 확인해줍니다.

Windows Port 상태 확인

Ansilbe 서버에서 Port 통신 확인

 

2. hosts 파일 작성

 

- Ansible로 작업을 진행할 Windows 서버 정보를 hosts 파일에 입력해줍니다.
- 계정 정보가 들어가므로 vault 파일 형태로 관리하는 것이 좋습니다.
- 신규 생성 시 ansible-vault create [파일 명]
- 수정 시 ansible-vault edit [파일 명]

hosts 파일 신규 생성

- 위의 명령어를 통해 hosts 파일을 여신 후 아래와 같이 정보를 입력해줍니다.
- 저는 winrm 인증 방식은 basic, port는 5985번을 사용합니다.


- 명령어 정리
## 신규 생성 시
# ansible-vault create /etc/ansilbe/hosts

## vault로 생성된 파일 수정 시
# ansible-vault edit /etc/ansilbe/hosts

[windows]
AD-OP-DC01 ansible_host=192.168.137.13

[windows:vars]
ansible_user=[계정 명]
ansible_password=[계정 암호]
ansible_connection=winrm
ansible_winrm_transport=basic
ansible_port=5985

:wq

 

3. role 파일 작성

 

- 파일 복사를 실행할 role 파일을 구성해줍니다.
- roles 신규 생성
# ansible-galaxy init /etc/ansible/roles/[생성할 role이름]

- tasks 생성
# vim /etc/ansible/roles/[role 이름]/tasks/main.yml
.
.
---
- name: copy test file
  win_copy:
    src: test.txt
    dest: C:\temp\test.txt
.
.

:wq

- 복사할 test.txt 파일 작성
# vim /etc/ansible/roles/[role 이름]/files/test.txt
.
.
ansilbe copy file test
.
.
:wq

 

4. playbook 생성

 

- Ansible을 실행할 Playbook 파일을 생성해줍니다.

# vim /etc/ansible/playbooks/[플레이북 명].yml
.
.
---
- hosts: windows
  roles:
    - win-test
.
.
:wq

 

5. playbook 실행

 

- 생성한 Playbook을 실행시켜줍니다.
# ansible-playbook --ask-vault-pass /etc/ansible/playbooks/[플레이북 명].yml
<암호 입력>

** Module awinrm or requests is not installed: No module named winrm 오류 발생


- 해결 방법
# pip install pywinrm

* pip 설치가 안되어있을 시
# apt-get install python-pip
# pip install pywinrm

* Python3 사용 시
# apt-get install python3-pip
# pip3 install pywinrm

- 재 실행

** "basic: the specified credentials were rejected by the server 인증 관련 오류 발생


- 해결 방법
> winrm get winrm/config 설정 상태 확인
** Auth Basic = true 상태 확인 / AllowUnencrypted = true 상태 확인

> Set-Item -Path WSMan:\localhost\Service\Auth\Basic -Value $true
> Set-Item -Path WSMan:\localhost\Service\AllowUnencrypted -Value $true
> Enable-PSRemoting -Force
> Set-Item WSMan:\localhost\Client\TrustedHosts -Value [Ansible 서버 IP]

 

5. 실행 결과 확인

 

- 아래와 같이 정상 실행됩니다.


- 서버 접속해서 확인해보면 아래와 같이 정상적으로 파일이 복사되었습니다.



728x90
반응형

'Ansible' 카테고리의 다른 글

Ansible Zabbix 운영  (0) 2021.04.29
Ansible 자주 쓰는 모듈 - 1  (0) 2020.10.31
Ansible task 생성 및 실행  (0) 2020.10.30
Ansible 설치 및 실행  (0) 2020.10.30
Ansible 기본 명령어  (0) 2020.10.25