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

  1. 開啟「設定」(Settings),選擇「應用程式」(App),再選擇「選用功能」(Optional Features)。
  2. 找 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 需要注意的事情。

  1. 預設的 shell 是使用 cmd,照文件說,若需要修改,是要改 ansible_shell_type 變數,這應該是要在 inventory 主機裡加入主機變數:ansible_shell_type,變數內容可以是 cmd 或 powershell。
  2. inventory 主機裡要加入 ansible_connection 主機變數,告知要使用 ssh 連線。
  3. 可能會需要在 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 主機就更簡單了。