Last Updated on February 18, 2023 by cscontents
Introduction
Connecting with a Windows machine using Ansible is little different from its Linux counterpart. In this post we will discuss how we can connect with a windows host using Ansible so that we can execute task remotely.
Ansible connects with Windows machine using WinRM. For this we need to install pywinrm module of python which will used for WinRM connectivity. For more details please follow this article Introduction to Ansible | High Level Understanding of Ansible
Prerequisite
Before going through this article I will assume you have knowledge about the below.
- Hands-on knowledge on Ansible
- Basics of networking
If you want to learn Ansible basics then please check out the below course from KodeKloud which offers one of the best learning material in DevOps world.
Link of Training Course: Ansible for absolute beginners
Note: The above links are affiliate links, if you enroll this course using the above link, then it would help us to get some monetary benefit from KodeKloud. It won’t cost you anything.
Step-by-Step guide
To connect with windows host using Ansible, we need to follow the below steps –
Step – 1
Ansible host or Ansible controller should be ready. It means on a Linux machine we need to install Ansible & use it as Ansible host.
ubuntu@ubuntu-1:~$ python3 --version Python 3.8.10 ubuntu@ubuntu-1:~$ ansible --version ansible 2.9.6 config file = /etc/ansible/ansible.cfg configured module search path = ['/home/ubuntu/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules'] ansible python module location = /usr/lib/python3/dist-packages/ansible executable location = /usr/bin/ansible python version = 3.8.10 (default, Jun 22 2022, 20:18:18) [GCC 9.4.0]
Step – 2
Install pywinrm module of python. For this we need pip.
To verify we can run below command.
ubuntu@ubuntu-1:~$ python3 -m pip -V pip 20.0.2 from /usr/lib/python3/dist-packages/pip (python 3.8)
Using pip we can install pywinrm by running the below command (don’t run the command as root user).
python3.x -m pip install --user pywinrm Note: Replace x by your python version
Step – 3
Ensure below is port open between ansible-host and target Windows machine.
- 5985 port should be open if we want to use HTTP.
- 5986 port should be open if we want to use HTTPS
To check the port we can use ‘telnet’.
telnet <IP of Windows server> 5985 telnet <IP of Windows server> 5986
Step – 4
In this step we will check whether “WinRM” service is running or not in the target Windows server. This “WinRM” service need to be running on the target Windows server.
We can check the “WinRM” config by running the below command in PowerShell.
winrm quickconfig
Step – 5
This is the final step, in this step we will test the connectivity. For this we will use “win_ping” module of ansible.
We need to create an inventory file which will contain details about the target Windows machine. So we will create an inventory.txt file and add the below content to it. Replace the IP and user, password with your details.
[remote_server] 20.28.x.x [remote_server:vars] ansible_user=my_user ansible_password=my_password ansible_port=5985 ansible_connection=winrm ansible_winrm_transport=ntlm ansible_winrm_server_cert_validation=ignore
Below is the ansible command we need to run,
ubuntu@ubuntu-1:~/tmp-ping$ ansible remote_server -i inventory.txt -m win_ping 20.28.x.x | SUCCESS => { "changed": false, "ping": "pong" }
After running the above command if you get output similar to above, then congratulations! You are able to connect with target Windows machine successfully.
Thank You.
If you are interested in learning DevOps, please have a look at the below articles, which will help you greatly.
- Kubernetes Series: Part 1 – Introduction to Kubernetes | Background of Kubernetes
- Kubernetes Series: Part 2 – Components of Kubernetes cluster | Kubernetes cluster in detail
- Kubernetes Series: Part 3 – What is Minikube and How to create a Kubernetes cluster (on Linux) using Minikube?
- Introduction to Ansible | High Level Understanding of Ansible
- Basics of automation using Ansible | Automate any task
- Automation of Java installation – using Ansible
- 10 frequently used ansible modules with example
- Jenkins Pipeline as code – High level information
- What is End-to-End Monitoring of any web application and Why do we need it?
- What is “Monitoring” in DevOps? Why do we need to Monitor App/DB servers, Transactions etc.?
- DevOps Engineer or Software Developer Engineer which is better for you?- Let’s discuss
- How To Be A Good DevOps Engineer?
- Network Connectivity Troubleshooting Guide for Beginners
- How to do git push, git pull, git add, git commit etc. with Bitbucket