Windows SSH setup
Ansible 可以透過 WinRM 連線到 Windows 主機進行操作,這部份的設置可以參考 Setting up a Windows Host
這篇文章裡,有一部份是我之前沒注意到的,就是 Windows 主機除了可以用 WinRM 之外,也可以用 SSH 來操作。
在 Windows Server 2019 以後,Microsoft 也提供了 OpenSSH Server 的功能,讓 IT 人員可以安裝。在安裝上去以後,就可以使用 SSH 來連線操作。
Microsoft 提供了如何安裝的說明文件:Install OpenSSH for Windows
- 開啟「設定」(Settings),選擇「應用程式」(App),再選擇「選用功能」(Optional Features)。
- 找 OpenSSH server 來安裝。
裝好以後,OpenSSH 服務會自動啟動,防火牆 22 也會啟用。
接下來就可以用 ssh 來測試,沒加入 AD 的話,domain 可以不用輸入。
ssh domain\username@servername
ssh username@servername
如果是 Windows 2019 以前的版本,可以從 PowerShell Win32-OpenSSH 這邊下載 .msi 來安裝 PowerShell/Win32-OpenSSH github
同樣也是裝好以後,OpenSSH 服務會自動啟動,防火牆 22 也會啟用。
接下來是講 Ansible 需要注意的事情。
- 預設的 shell 是使用 cmd,照文件說,若需要修改,是要改 ansible_shell_type 變數,這應該是要在 inventory 主機裡加入主機變數:ansible_shell_type,變數內容可以是 cmd 或 powershell。
- inventory 主機裡要加入 ansible_connection 主機變數,告知要使用 ssh 連線。
- 可能會需要在 ansible.cfg 裡加上 remote_tmp 設定,指定為 C:\TEMP
inventory 裡會是這樣
192.168.192.11 ansible_user=Administrator ansible_connection=ssh ansible_shell_type=cmd
Playbook 裡可以使用 win_ 開頭的模組,或是使用 raw 模組
---
- name: Windows Server Automation
hosts: all
gather_facts: no
tasks:
- name: shell
raw: |
powershell -executionpolicy bypass -File d:\script\du.ps1
register: shell_result
- debug:
var: shell_result.stdout
- name: ping
win_ping
- name: win_shell
win_shell: |
help
register: shell_result
- debug:
var: shell_result.stdout
使用 OpenSSH 的設置方式比使用 WinRM 簡單多了,而且在 Windows Server 2019 以後的版本都可以安裝,以後 Ansible 要控制 Windows 主機就更簡單了。