最近工作中需要統一管理一批Linux和Windows機器,實現應用的自動化部署。剛開始直接使用的ssh登錄到目標機器進行部署,Linux機器上面沒什麼問題,但是Windows上面需要提前安裝並配置好ssh server。當時選用freesshd作爲ssh server,雖然成功實現了自動化,但是因爲freesshd已經很久沒更新了,不符合公司的安全規範,所以就重新調研,最後選擇了Ansible。
Ansible從1.7+版本之後提供了對Windows機器的支持,而且管理方式和管理Linux機器大同小異,這一點非常棒。不過不同的是,與Linux機器通信是採用的ssh,而與Windows的通信方式則採用了Windows機器自帶的powershell。因此在Windows機器上只需完成很少的配置即可使用Ansible進行管理。
Ansible可用於管理Windows集羣,不過管理節點需要部署在Linux機器上,而且需要預裝python winrm模塊。同時,Windows機器上的powershell版本需要滿足3.0+,且Management Framework也需要滿足3.0+版本。
Windows機器配置
Windows機器需要完成如下幾步簡單配置才能實現與管理節點通信。
啓用Administrator賬戶
要想使用Ansible管理windows主機,需要使用Administrator賬戶進行登錄。
默認情況下,windows系統是不允許使用Administrator管理員賬戶進行登錄的,在開機登錄界面也將Administrator賬戶隱藏了。我們需要啓用Administrator賬戶,如果已經可以使用Administrator進行登錄,則跳過這一步。
我們從如下路徑進行配置:計算機 –> 管理 –> 系統工具 –> 本地用戶和組 –> 用戶 –> Administrator,雙擊然後我們可以看到如下界面。
取消”賬戶已禁用”選項,應用。
然後我們再右鍵Administrator,爲該賬戶設置密碼。完成之後重啓即可使用Administrator賬戶進行登錄了。
安裝Microsoft .NET Framework 4
下載.Net Framework 4到本地進行安裝。
升級powershell版本爲3.0+
我們首先在powershell中運行get-host
命令查看powershell版本,win7默認安裝的powershell爲2.0版本,我們需要升級到3.0+版本。
下載安裝Windows Management Framework 3.0,這裏選擇Windows6.1-KB2506143-x64.msu下載安裝。安裝完成之後,重啓系統,之後查看powershell版本會發現已經更新到了3.0版本。
配置winrm服務
Windows上winrm服務默認是未啓用的,使用如下命令可以查看狀態。
> winrm enumerate winrm/config/listener
使用如下命令配置winrm服務
> winrm quickconfig
> winrm set winrm/config/service/auth '@{Basic="true"}'
> winrm set winrm/config/service '@{AllowUnencrypted="true"}'
至此,windows主機的配置就完成了,接下來我們配置linux管理節點進行驗證。
Linux管理節點配置
首先參考前一篇文章安裝好ansible。
然後需要使用pip安裝pywinrm模塊。如果沒有安裝pip,則先參考前面的文章安裝並配置pip。
$ pip install "pywinrm>=0.2.2"
然後我們在/etc/ansible/hosts文件中增加windows主機的配置信息,如下:
[win1]
192.168.1.7 ansible_ssh_user="Administrator" ansible_ssh_pass="admin123" ansible_ssh_port=5985 ansible_connection="winrm" ansible_winrm_server_cert_validation=ignore
然後使用如下命令進行驗證,我們看到,此時可以使用win_ping模塊連到之前配置的windows主機上了。
$ ansible win1 -m win_ping
192.168.1.7 | SUCCESS => {
"changed": false,
"failed": false,
"ping": "pong"
}
Windows下可用模塊
Windows下的可用模塊並沒有linux下那麼多,不過常用的功能已經有了,例如:
#測試聯通性
$ ansible win1 -m win_ping
192.168.1.7 | SUCCESS => {
"changed": false,
"failed": false,
"ping": "pong"
}
#拷貝文件
$ ansible win1 -m win_copy -a 'src=/etc/passwd dest=C:\'
192.168.1.7 | SUCCESS => {
"changed": true,
"checksum": "395a02d7cd0aa830be63b4bbc6d2ee082bb14934",
"dest": "'C:\\passwd'",
"failed": false,
"operation": "file_copy",
"original_basename": "passwd",
"size": 1150,
"src": "/etc/passwd"
}
#創建刪除文件/目錄
$ ansible win1 -m win_file -a "path=C:\passwd state=absent"
192.168.1.7 | SUCCESS => {
"changed": true,
"failed": false
}
Windows下更多的可用模塊可以參考官方文檔。
參考資料:
1. http://www.cnblogs.com/kingleft/p/6391652.html
2. http://blog.csdn.net/juladoe/article/details/76963073