選單
GSS 技術部落格
在這個園地裡我們將從技術、專案管理、客戶對談面和大家分享我們多年的經驗,希望大家不管是喜歡或是有意見,都可以回饋給我們,讓我們有機會和大家對話並一起成長!
若有任何問題請來信:gss_crm@gss.com.tw
4 分鐘閱讀時間 (823 個字)

Ansible #5 - 偽安裝篇[Windows]

shutterstock_198004562

 

  • 破題法: Windows 不能 裝 Ansible

    • 所以現在是在裝肖維嗎?這篇的意義在哪?
    • 各位先冷靜,請聽我解釋完再來決定要不要海扁我 ...
      • 首先,Ansible 本來就是需要 Unix based 的作業系統才能運作的,所以很顯然 Windows 不符合這個條件
      • 但仍然有其他的方法可以解決這個問題:
        • Cygwin
        • Virtual Machine
        • WSL2
      • 可是老實說,如果非要用到上面的方法,何不直接開一台 Linux 就好了呢?
        • 沒錯,所以我個人的想法就是,如果真的要在 Windows 上跑 Ansible,那就開 VM 吧
    • 那這篇的重點是什麼?
      • 雖然 Windows 無法很方便地控別的機器,但別的機器控還是可行的
      • Windows 要能被控要符合以下幾個條件:
        • 必須是 Windows 7,8.1 或 10
        • 如果是 Windows Server 那必須是 Windows Server 2008, 2008 R2, Windows Server 2012, 2012 R2, 2016, 2019
        • PowerShell 版本要在 3.0 以上
        • .NET Framework 要 4.0 以上
        • WinRM listener 需被建立並啟動
  • 既然知道條件了就開始動手吧!

    • 首先要針對 ansible 本身動點手腳
      • ansible 需要裝一個 pywinrm 的套件,才能跟 windows 的機器溝通(ansible 2.8 版之前)
      • 安裝的指令如下:
          pip3 install pywinrm
    • 接著要在 Windows 上安裝上述的東西
      • 首先要去下載一個檔案,用來啟用 WinRM => 連結
      • 接著在 Windows 的環境下以系統管理員的身份開啟 Powershell,並執行剛下載的檔案
    • 最後再修改一下 inventory(hosts)
      • 必須加入一些資訊如下圖:
        • 首先是 [winvm] 這個群組,其底下的 Domain/IP,目前只有一個 172.16.85.12
        • 再來是其專用的變數 [winvm:vars],先後設定了帳密,以及很重要的連線方式是 winrm
        • 最後那一列忽略憑證的原因是因為是自簽的,上面的 Powershell 有顯示一列 Self-signed SSL ...(略)
      • 最後以以下的指令 ping 看看:
          ansible win -m win_ping
  • 以上就是 Windows 被 Ansible 操控前所需要的設定

    • 前面有提到 ansible 在 2.8 版後可以走 SSH,沒錯,不過流程很複雜的!要跟的…快點上車啊!

      • 首先要在 windows 安裝 OpenSSH

        • 這是透過一套叫作 Chocolatey 的套件管理工具安裝的,安裝的方式很簡單,因此在這只提供連結
        • 裝這個主要是讓 Windows 能作為 SSH 的 server 或是 client,且會自動產一些 key
      • 接著要把 ansible 所在機器的 public key 貼到 Windows 的機器上,才能直接透過 ssh key 登入操作

        • key 的位子在 ~/.ssh/id_rsa.pub
        • 如果 Windows 的 User 本身具有系統管理員的權限的話 public key 要放在 C:\ProgramData\ssh\administrators_authorized_keys
        • 如只果只是一般的使用者,就放在 C:\Users\{{some-user}}\.ssh\authorized_keys 就可以了
      • 最後調整一下 inventory 如下圖就可以了:

        • 其中 ansible_connection 要從 winrm 改成 ssh

        • 另外,預設連過去的 shell 是 cmd,如果要調整成 powershell 要再做一些別的處理如下 playbook

            ---
            - name: Change Default Shell
              hosts: winvm
          
              tasks:
                - name: set the default shell to PowerShell
                  win_regedit:
                    path: HKLM:\SOFTWARE\OpenSSH
                    name: DefaultShell
                    data: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
                    type: string
                    state: present
        • 假設 playbook 的名稱叫 setup-powershell-default.yml,那指令就會是:

            ansible-playbook setup-powershell-default.yml
        • 至於 playbook 是什麼,以後再提吧,,會需要切成 powershell 是因為大部份的 module 都是以 Powershell 實作的

  • 下一篇會先介紹一些好建立測試環境的工具,敬請期待。

  • 參考資料

Ansible #6 - 工具篇
Ansible #4 - 安裝篇[mac]

相關文章

 

評論 2

David Chou (周彥江) 於 2021/05/20, 週四 09:13

在較新的 Windows 上安裝 OpenSSH 有著更簡便的做法,可參考 https://docs.microsoft.com/en-us/windows-server/administration/openssh/openssh_install_firstuse

在較新的 Windows 上安裝 OpenSSH 有著更簡便的做法,可參考 https://docs.microsoft.com/en-us/windows-server/administration/openssh/openssh_install_firstuse
George Chou (周孚陽) 於 2021/05/20, 週四 09:48

秀一下 chocolatey 的操作而已 XD
Windows 10 and Windows Server 2019 最新版本應該都是內建有安裝了,只要啟用就好,
比較舊的就要手動安裝了,如 David 提供的連結

秀一下 chocolatey 的操作而已 XD Windows 10 and Windows Server 2019 最新版本應該都是內建有安裝了,只要啟用就好, 比較舊的就要手動安裝了,如 David 提供的連結
已經注冊了? 這裡登入
Guest
2025/04/30, 週三

Captcha 圖像