Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Ansible deployment to windows host behind bastion

I am currently successfully using Ansible to run tasks on hosts that are in a private subnet in AWS, which the below group_vars is setting up:

ansible_ssh_common_args: '-o ProxyCommand="ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -W %h:%p -q ec2-user@[email protected]"'

This is working fine.

For Windows instances not in a private subnet the following group_vars works:

---
ansible_user: "AnsibleUser"
ansible_password: "Password"
ansible_port: 5986
ansible_connection: winrm
ansible_winrm_server_cert_validation: ignore

Now, trying to get Ansible to deploy to a Windows server behind the bastion by just using the ProxyCommand won't work - which I understand. I believe though that there is a new protocol/module I can use called psrp.

I imagine that my group_vars for my Windows hosts needs to change to something like this:

---
ansible_user: "AnsibleUser"
ansible_password: "Password"
ansible_port: 5986
ansible_connection: psrp
ansible_psrp_cert_validation: ignore

If I run with just the above changes against instances that are publicly available (and not trying to connect via a bastion), my task seems to work fine:

Using module file /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/ansible/modules/windows/win_shell.ps1
<10.100.11.14> ESTABLISH PSRP CONNECTION FOR USER: Administrator ON PORT 5986 TO 10.100.11.14
PSRP: EXEC (via pipeline wrapper)

I know there must be more changes before I can try this on a windows server behind a bastion, but ran it anyway to see what errors I get to give me clues on what to do next. Here is the result when running this on an instance behind a bastion server:

Using module file /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/ansible/modules/windows/setup.ps1
<10.100.11.14> ESTABLISH PSRP CONNECTION FOR USER: Administrator ON PORT 5986 TO 10.100.11.14
The full traceback is:
.
.
.
.
ConnectTimeout: HTTPSConnectionPool(host='10.100.11.14', port=5986): Max retries exceeded with url: /wsman (Caused by ConnectTimeoutError(<urllib3.connection.VerifiedHTTPSConnection object at 0x110bbfbd0>, 'Connection to 10.100.11.14 timed out. (connect timeout=30)'))

It seems like Ansible is ignoring my group_vars for the ProxyCommand - which I'm not sure if that's expected. I'm also not sure on what the next steps are to enable Ansible to deploy to Windows servers behind a bastion.

What config am I missing?

like image 460
WarrenG Avatar asked Apr 12 '19 14:04

WarrenG


1 Answers

The doc says, the ansible_ssh_common_args setting is appended to sftp, scp, and ssh commands. So it sounds normal to me that is not taking into account when using winrm or psrp ansible_connection.

As explained in the link provided by Pouyan in the comments, ansible_psrp_proxy variable will be used to provide proxy information.

ansible_connection: psrp
ansible_psrp_proxy=socks5h://localhost:1234

More info on the creation of the socks proxy can be found on: https://www.bloggingforlogging.com/2018/10/14/windows-host-through-ssh-bastion-on-ansible/

like image 116
xenlo Avatar answered Nov 15 '22 00:11

xenlo