Using Ansible in Cygwin and SSH Error: data could not be sent to the remote host. Make sure this host can be reached over ssh

I am using cygwin to attempt to run Ansible in windows. We have ansible playbooks that will run fine when executed from a linux box. However, when I attempt to connect to the servers with Ansible on Windows I get the following error occasionally:
SSH Error: data could not be sent to the remote host. Make sure this host can be reached over ssh

I initially thought there was a configuration issue. However, I am able to make a successful connection occasionally. I am attaching a log that shows requests I made while trying to figure it out.

Is there anyway to further diagnose this issue?

This was very frustrating because I tried literally everything I could think of. I knew the entire time that my public/private key files were correct but I never got a successful ping unless I did the requests in succession.

Couldn’t attach file… so here:

username@server /cygdrive/c/SourceCode/path

$ ansible dns-1.prod.path -m ping

dns-1.prod.path | FAILED => SSH Error: data could not be sent to the remote host. Make sure this host can be reached over ssh

username@server /cygdrive/c/SourceCode/path

$ ansible dns-1.prod.path -m ping -u username

dns-1.prod.path | FAILED => SSH Error: data could not be sent to the remote host. Make sure this host can be reached over ssh

username@server /cygdrive/c/SourceCode/path

$ ansible dns-1.prod.path -m ping -u username -k

SSH password:

dns-1.prod.path | success >> {

“changed”: false,

“ping”: “pong”

}

username@server /cygdrive/c/SourceCode/path

$ ansible dns-1.prod.path -m ping -k

SSH password:

dns-1.prod.path | FAILED => SSH Error: data could not be sent to the remote host. Make sure this host can be reached over ssh

username@server /cygdrive/c/SourceCode/path

$ ansible dns-1.prod.path -m ping -u username -k

SSH password:

dns-1.prod.path | FAILED => SSH Error: data could not be sent to the remote host. Make sure this host can be reached over ssh

username@server /cygdrive/c/SourceCode/path

$ ansible dns-1.prod.path -m ping -u username -k

SSH password:

dns-1.prod.path | FAILED => SSH Error: data could not be sent to the remote host. Make sure this host can be reached over ssh

username@server /cygdrive/c/SourceCode/path

$ ansible dns-1.prod.path -m ping -u username -k

SSH password:

dns-1.prod.path | FAILED => SSH Error: data could not be sent to the remote host. Make sure this host can be reached over ssh

///when password was entered incorrectly

username@server /cygdrive/c/SourceCode/path

$ ansible dns-1.prod.path -m ping -u username -k

SSH password:

dns-1.prod.path | FAILED >> {

“failed”: true,

“msg”: “”,

“parsed”: false

}

username@server /cygdrive/c/SourceCode/path

$ ansible dns-1.prod.path -m ping -u username -k

SSH password:

dns-1.prod.path | success >> {

“changed”: false,

“ping”: “pong”

}

username@server /cygdrive/c/SourceCode/path

$ ansible dns-1.prod.path -m ping

dns-1.prod.path | FAILED => SSH Error: data could not be sent to the remote host. Make sure this host can be reached over ssh

username@server /cygdrive/c/SourceCode/path

$ ansible dns-1.prod.path -m ping

dns-1.prod.path | success >> {

“changed”: false,

“ping”: “pong”

}

username@server /cygdrive/c/SourceCode/path

$ ansible dns-1.prod.path -m ping

dns-1.prod.path | FAILED => SSH Error: data could not be sent to the remote host. Make sure this host can be reached over ssh

username@server /cygdrive/c/SourceCode/path

$ ansible dns-1.prod.path -m ping

dns-1.prod.path | success >> {

“changed”: false,

“ping”: “pong”

}

username@server /cygdrive/c/SourceCode/path

$ ansible dns-1.prod.path -m ping

dns-1.prod.path | FAILED => SSH Error: data could not be sent to the remote host. Make sure this host can be reached over ssh

username@server /cygdrive/c/SourceCode/path

$ ansible dns-1.prod.path -m ping

dns-1.prod.path | FAILED => SSH Error: data could not be sent to the remote host. Make sure this host can be reached over ssh

username@server /cygdrive/c/SourceCode/path

$ ansible dns-1.prod.path -m ping

dns-1.prod.path | FAILED => SSH Error: data could not be sent to the remote host. Make sure this host can be reached over ssh

username@server /cygdrive/c/SourceCode/path

$ ansible dns-1.prod.path -m ping

dns-1.prod.path | success >> {

“changed”: false,

“ping”: “pong”

}

username@server /cygdrive/c/SourceCode/path

$ ansible dns-1.prod.path -m ping

dns-1.prod.path | FAILED => SSH Error: data could not be sent to the remote host. Make sure this host can be reached over ssh

username@server /cygdrive/c/SourceCode/path

$ ansible dns-1.prod.path -m ping

dns-1.prod.path | success >> {

“changed”: false,

“ping”: “pong”

}

username@server /cygdrive/c/SourceCode/path

$ ansible dns-1.prod.path -m ping

dns-1.prod.path | success >> {

“changed”: false,

“ping”: “pong”

}

username@server /cygdrive/c/SourceCode/path

$ ansible dns-1.prod.path -m ping

dns-1.prod.path | success >> {

“changed”: false,

“ping”: “pong”

}

username@server /cygdrive/c/SourceCode/path

$ ansible dns-1.prod.path -m ping

dns-1.prod.path | FAILED => SSH Error: data could not be sent to the remote host. Make sure this host can be reached over ssh

username@server /cygdrive/c/SourceCode/path

$ ansible dns-1.prod.path -m ping

dns-1.prod.path | success >> {

“changed”: false,

“ping”: “pong”

}

username@server /cygdrive/c/SourceCode/path

$ ansible dns-1.prod.path -m ping

dns-1.prod.path | FAILED => SSH Error: data could not be sent to the remote host. Make sure this host can be reached over ssh

username@server /cygdrive/c/SourceCode/path

$ ansible dns-1.prod.path -m ping

dns-1.prod.path | FAILED => SSH Error: data could not be sent to the remote host. Make sure this host can be reached over ssh

username@server /cygdrive/c/SourceCode/path

$ ansible dns-1.prod.path -m ping

dns-1.prod.path | FAILED => SSH Error: data could not be sent to the remote host. Make sure this host can be reached over ssh

username@server /cygdrive/c/SourceCode/path

$ ansible dns-1.prod.path -m ping

dns-1.prod.path | FAILED => SSH Error: data could not be sent to the remote host. Make sure this host can be reached over ssh

username@server /cygdrive/c/SourceCode/path

$ ansible dns-1.prod.path -m ping

dns-1.prod.path | FAILED => SSH Error: data could not be sent to the remote host. Make sure this host can be reached over ssh

username@server /cygdrive/c/SourceCode/path

$ ansible dns-1.prod.path -m ping

dns-1.prod.path | FAILED => SSH Error: data could not be sent to the remote host. Make sure this host can be reached over ssh

username@server /cygdrive/c/SourceCode/path

$ ansible dns-1.prod.path -m ping

dns-1.prod.path | success >> {

“changed”: false,

“ping”: “pong”

}

Ansible does not support (and won’t) support running Windows as the control platform – so I’m not surprised it doesn’t work :slight_smile:

We may (and likely will) be doing management of Windows nodes in the future, but I don’t want to provide dates as this tends to move a bit.

(When we do, we will be building it here)

–Michael

This presents a problem for my use case: if I want to use Ansible as my Infrastructure CM/provisioner, and i want my developers to use vagrant boxes configured from the same playbooks as production, for those devs on windows (and for myself), I can’t use the vagrant Ansible provisioner?

Packer’s ansible provisioner kind of moots the windows/cygwin question by the fact that it only supports running ansible on the VM itself, and copies over the playbooks.

I suppose that if I start from Packer-built boxen, that will force me to develop a pull-style ansible workflow, which might be somewhat useful anyway.