Hướng Dẫn Quản Trị Windows Server Với Ansible

Bài viết này sẽ hướng dẫn bạn Quản Trị Windows Server Với Ansible. Nếu bạn cần hỗ trợ, xin vui lòng liên hệ VinaHost qua Hotline 1900 6046 ext.3, email về support@vinahost.vn hoặc chat với VinaHost qua livechat https://livechat.vinahost.vn/chat.php.

Giới thiệu

Ansible là một công cụ quản lý cấu hình mạnh mẽ và tiện dụng. Ansible sử dụng giao thức SSH để kết nối và quản lý các máy khác. Thế nhưng, trên Windows lại không có SSH (Microsoft dự kiến sẽ tích hợp sẵn OpenSSH vào Windows trong tương lai, nhưng chưa phải bây giờ).

Vậy nên, ta cần phải sử dụng WinRM, một tính năng của Windows để cho phép Ansible quản trị từ xa.

WinRM

WinRM là giao thức quản trị từ xa (Windows Remote Management) được Microsoft phát triển dành cho các hệ điều hành Windows.

Giao thức này cho phép người dùng quản trị các máy Windows từ xa qua HTTP/HTTPS. Từ phiên bản Windows Server 2012, WinRM được bật sẵn, nhưng để giao tiếp được với Ansible thì ta cần phải cấu hình thêm kha khá mới chạy được (và chạy an toàn).

Có thể dùng key SSH để kết nối không?

WinRM hỗ trợ nhiều phương pháp chứng thực khác nhau (sẽ đề cập tới ở bên dưới). Gần giống với SSH Key là Phương pháp chứng thực bằng certificate X509 dựa trên cặp certificate – private key (coi cụ thể hơn trong phần cài đặt).

Hướng dẫn Cấu Hình Quản Trị Windows Server Với Ansible Với Ansible

Trong bài viết này, mình sẽ hướng dẫn cấu hình Ansible quản trị Windows cho môi trường WorkGroup, sử dụng certificate – private key để kết nối.

Linux – Controller

  • Cài đặt Ansible bản 2.5 trở lên.
  • Cài đặt gói pywinrm (cài qua pip).

Windows – Slaves

  • Windows Server bản 2008 trở lên. Windows bản 7 trở lên.
  • Powershell phiên bản 3.0 + .NET Framework bản 4.0 trở lên (nếu thấp hơn thì có thể upgrade bằng script này).
  • Active directory – đối với Windows server (không bắt buộc, tuy nhiên nếu server Windows đặt trong môi trường Domain thì việc setup sẽ dễ dàng hơn rất nhiều).

Đối với các bàn Windows server 2008 trở về trước, có thể upgrade phiên bản PowerShell trong máy bằng cách sau, mở PowerShell trên Windows dưới quyền Administrator và gõ những lệnh sau:

$url = “https://raw.githubusercontent.com/jborean93/ansible-windows/master/scripts/Upgrade-PowerShell.ps1”

$file = “$env:temp\Upgrade-PowerShell.ps1”

$username = “Administrator”

$password = “PasswordCuaBan”

 

(New-Object -TypeName System.Net.WebClient).DownloadFile($url, $file)

Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Force

 

# Chon version 3.0, 4.0 hoac 5.1, tot nhat la ban 4.0 tro len

&$file -Version 5.1 -Username $username -Password $password -Verbose

 

# Tat tinh nang thuc thi script

Set-ExecutionPolicy -ExecutionPolicy Restricted -Force

 

$reg_winlogon_path = “HKLM:\Software\Microsoft\Windows NT\CurrentVersion\Winlogon”

Set-ItemProperty -Path $reg_winlogon_path -Name AutoAdminLogon -Value 0

Remove-ItemProperty -Path $reg_winlogon_path -Name DefaultUserName -ErrorAction SilentlyContinue

Remove-ItemProperty -Path $reg_winlogon_path -Name DefaultPassword -ErrorAction SilentlyContinue

Chú ý: Để đảm bảo an toàn, cần setup một đường mạng Private để Ansible liên lạc với các máy Windows. Không nên quản trị các máy này qua đường mạng Public.

Cài đặt

Cài đặt Ansible trên Linux controller

Ansible dùng gói pywinrm để tương tác với các máy chạy Windows thông qua giao thức WinRM. Set up Ansible trên Linux khá đơn giản, ta dùng những lệnh sau:

$ sudo yum install -y epel-release

$ sudo yum install ansible

$ sudo yum install python-pip

$ sudo pip install “pywinrm>=0.3.0”

Sau khi đã cài đặt xong, ta cần phải tạo cặp certificate – private key, ta sẽ đặt file certificate trên các host Windows (tương tự như public key). Điều chỉnh username thành user Admin local chạy trên máy Windows, sau đó chạy script sau để tạo cặp key:

# set the name of the local user that will have the key mapped to

# This is the local admin user on windows hosts

USERNAME=”userAdminLocal”

 

cat > openssl.conf << EOL

distinguished_name = req_distinguished_name

[req_distinguished_name]

[v3_req_client]

extendedKeyUsage = serverAuth

subjectAltName = otherName:1.3.6.1.4.1.311.20.2.3;UTF8:$USERNAME@localhost

EOL

 

export OPENSSL_CONF=openssl.conf

openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -out cert.pem -outform PEM -keyout cert_key.pem -subj “/CN=$USERNAME” -extensions v3_req_client

rm openssl.conf

Trong folder /etc/ansible, tạo folder group_vars, trong folder này, tạo file windows, chứa thông tin private key dùng để kết nối tới Windows

ansible_port: 5986

ansible_connection: winrm

ansible_winrm_cert_pem: /etc/ansible/certs/cert.pem

ansible_winrm_cert_key_pem: /etc/ansible/certs/cert_key.pem

ansible_winrm_transport: certificate

ansible_winrm_server_cert_validation: ignore

Tiếp theo, điều chỉnh file /etc/ansible/hosts như sau:

[windows:children]

#win-*

win-test

win-db

 

[win-test]

10.10.10.15

10.10.10.16

 

[win-db]

10.10.10.123

10.10.10.124

Trong đó, [windows:children] có nghĩa là những group win-test, win-db sẽ kế thừa các thuộc tính được cấu hình trong /etc/ansible/group_vars/windows. Sau này khi cần tạo thêm group mới, ta chỉ cần add thêm vô mục [windows:childern] là được.

Cài đặt trên các host chạy Windows

Tải toàn bộ các script ở link sau và đặt cùng một thư mục: GitHub

Các bước làm tuần tự:

  1. Copy file cert.pem đã tạo trên Controller, copy qua server Windows cần điều khiển.
  2. Chạy script ConfigureRemotingForAnsible.ps1 script này dùng để setup cơ bản cho WinRM.
  3. Chạy script ansible_winrm_enable.ps1, script này sẽ gọi lại 2 script:
    • Script createAdminAccount.ps1 tạo 1 account Admin trên local, account này dùng để quản trị con Windows
    • Script import_cert.ps1 mapping certificate vừa tạo trên windows (cert.pem) vào account mới tạo, như vậy Ansible mới có thể quản trị Windows bằng private key.

Sau khi cài đặt xong, ta đứng trên máy Controller, gõ lệnh sau để kiểm tra khả năng kết nối tới các máy Windows:

# ansible wintest m win_ping

10.10.10.16 | SUCCESS => {

“changed”: false,

“ping”: “pong”

}

10.10.10.15 | SUCCESS => {

“changed”: false,

“ping”: “pong”

}

Một số lỗi thường gặp

  • WinRM không chạy trên máy remote => Kiểm tra và chạy lại script
  • Firewall trên máy remote đang chặn WinRM => Allow port 5895, 5896

Một số tùy chọn chứng thực của WinRM

Ở trên là hướng dẫn chạy script nhanh gọn lẹ, còn mục dưới đây là dành cho bạn nào cần tìm hiểu thêm về các tùy chọn chứng thực của Ansible.

Khi giao tiếp giữa Ansible và WinRM, ta cần chọn một chuẩn chứng thực để 2 bên kết nối được với nhau (như dùng password, certificate, Kerberos…).

Ta chọn loại giao thức chứng thực cho Ansible bằng biến ansible_winrm_transport

Các giao thức chứng thực được hỗ trợ:

Option Local Accounts Account của Domain Mã hóa

HTTP

Nhận xét
Basic Yes No No Chỉ nên dùng để test kết nối
NTLM Yes Yes Yes An toàn hơn Basic một chút, nhưng về cơ bản vẫn là chứng thực bằng Password
Certificate Yes No No Đối với môi trường WorkGroup thì đây là cách kết nối bảo mật nhất.
Kerberos No Yes Yes An toàn, cần môi trường domain.
CredSSP Yes Yes Yes An toàn, cần môi trường domain.

Basic

Là giao thức chứng thực đơn giản, chỉ dùng username/password. Đây cũng là giao thức kém bảo mật nhất, dữ liệu nếu truyền qua HTTP thì có thể dễ dàng bị bẻ khóa. Chỉ hỗ trợ chứng thực bằng Local Account trên từng máy. Dùng cho môi trường Test/Dev, KHÔNG DÙNG CHO MÔI TRƯỜNG PRODUCTION.

Cấu hình trên Ansible

Mở file /etc/ansible/group_vars/windows, điều chỉnh những dòng sau:

ansible_user: LocalUsername

ansible_password: PasswordLocalUser

ansible_connection: winrm

ansible_winrm_transport: basic

Cấu hình trên Windows

Giao thức này mặc định là tắt, để bật lên thì ta dùng lệnh sau thông qua Powershell:

Set-Item -Path WSMan:\localhost\Service\Auth\Basic -Value $true

Certificate

Đây là cách chứng thực dùng cặp certificate – private key, tương tự như dùng SSH key pair trên Linux. Tuy nhiên format file và quá trình tạo key có chút khác biệt.

Cấu hình trên Ansible

Mở file /etc/ansible/group_vars/windows, điều chỉnh những dòng sau:

ansible_connection: winrm

ansible_winrm_cert_pem: /path/to/certificate/public/key.pem

ansible_winrm_cert_key_pem: /path/to/certificate/private/key.pem

ansible_winrm_transport: certificate

Cấu hình trên Windows

Giao thức này mặc định là tắt, để bật lên thì ta dùng lệnh sau thông qua Powershell:

Set-Item -Path WSMan:\localhost\Service\Auth\Certificate -Value $true

THAM KHẢO CÁC DỊCH VỤ TẠI VINAHOST:

>> SERVERCOLOCATION – CDN

>> CLOUDVPS

>> HOSTING

>> EMAIL

>> WEBSITE

>> TÊN MIỀN

>> SSL

Đánh giá bài viết
Was this article helpful?
Đánh giá
Đánh giá bài viết
Đăng ký nhận tin

Để không bỏ sót bất kỳ tin tức hoặc chương trình khuyến mãi từ Vinahost

    Bài viết liên quan
    Bình luận
    Theo dõi
    Thông báo của
    guest
    0 Góp ý
    Phản hồi nội tuyến
    Xem tất cả bình luận