title: I can ssh to OpenStack instance but Ansible can't -- what is it doing differently?
body: <p>I've created an Ubuntu instance in OpenStack and retrieved the pem file to allow me to ssh into it from my Control machine. In total I have just two machines: My Control machine running Ubuntu and with Ansible 2.0.0.2 installed, and my Openstack instance that is also running Ubuntu.</p>
  
  <p>From that control machine, I can ssh in using:</p>
  
  <pre><code>ssh -i /home/lovea/.ssh/ggcloud-keypair.pem ubuntu@192.168.138.107
  </code></pre>
  
  <p>This works - Without any additional keystrokes, I'm logged in on the OpenStack instance.</p>
  
  <p>But I want to use Ansible - running on this same Control machine - to provision the Ubuntu instance. In <code>/etc/ansible/ansible.cfg</code> I've set the private key file to use the same one as I've been using to ssh. I then try to ping the Openstack instance using the following Ansible command:</p>
  
  <pre><code>ansible -vv --become-user ubuntu -i '192.168.138.107,' all -m ping
  </code></pre>
  
  <p>As I understand it, Ansible should try to connect as user <code>ubuntu</code> using the same ssh credentials. However, the response I get is:</p>
  
  <pre><code>192.168.138.107 | UNREACHABLE! =&gt; {
      "changed": false,
      "msg": "ERROR! SSH encountered an unknown error during the connection. We recommend you re-run the command using -vvvv, which will enable SSH debugging output to help diagnose the issue",
      "unreachable": true
  }
  </code></pre>
  
  <p>As instructed, I reran this with <code>-vvvv</code> but there's a lot of output:</p>
  
  <pre><code>Using /etc/ansible/ansible.cfg as config file
  Loaded callback minimal of type stdout, v2.0
  &lt;192.168.138.107&gt; ESTABLISH SSH CONNECTION FOR USER: None
  &lt;192.168.138.107&gt; SSH: EXEC ssh -C -vvv -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/home/lovea/.ssh/ggcloud-keypair.pem"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o ControlPath=/home/lovea/.ansible/cp/ansible-ssh-%h-%p-%r -tt 192.168.138.107 '( umask 22 &amp;&amp; mkdir -p "$( echo $HOME/.ansible/tmp/ansible-tmp-1465459787.48-123588424864170 )" &amp;&amp; echo "$( echo $HOME/.ansible/tmp/ansible-tmp-1465459787.48-123588424864170 )" )'
  192.168.138.107 | UNREACHABLE! =&gt; {
      "changed": false,
      "msg": "ERROR! SSH encountered an unknown error. The output was:\nOpenSSH_7.2p2 Ubuntu-4ubuntu1, OpenSSL 1.0.2g-fips  1 Mar 2016
  debug1: Reading configuration data /etc/ssh/ssh_config
  debug1: /etc/ssh/ssh_config line 19: Applying options for *
  debug1: auto-mux: Trying existing master
  debug1: Control socket \"/home/lovea/.ansible/cp/ansible-ssh-192.168.138.107-22-lovea\" does not exist
  debug2: resolving \"192.168.138.107\" port 22
  debug2: ssh_connect_direct: needpriv 0
  debug1: Connecting to 192.168.138.107 [192.168.138.107] port 22.
  debug2: fd 3 setting O_NONBLOCK
  debug1: fd 3 clearing O_NONBLOCK
  debug1: Connection established.
  debug3: timeout: 9999 ms remain after connect
  debug1: key_load_public: No such file or directory
  debug1: identity file /home/lovea/.ssh/ggcloud-keypair.pem type -1
  debug1: key_load_public: No such file or directory
  debug1: identity file /home/lovea/.ssh/ggcloud-keypair.pem-cert type -1
  debug1: Enabling compatibility mode for protocol 2.0
  debug1: Local version string SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu1
  debug1: Remote protocol version 2.0, remote software version OpenSSH_7.2p2 Ubuntu-4ubuntu1
  debug1: match: OpenSSH_7.2p2 Ubuntu-4ubuntu1 pat OpenSSH* compat 0x04000000
  debug2: fd 3 setting O_NONBLOCK
  debug1: Authenticating to 192.168.138.107:22 as 'lovea'
  debug3: hostkeys_foreach: reading file \"/home/lovea/.ssh/known_hosts\"
  debug3: record_hostkey: found key type ECDSA in file /home/lovea/.ssh/known_hosts:12
  debug3: load_hostkeys: loaded 1 keys from 192.168.138.107
  debug3: order_hostkeyalgs: prefer hostkeyalgs: ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp521-cert-v01@openssh.com,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521
  debug3: send packet: type 20
  debug1: SSH2_MSG_KEXINIT sent
  debug3: receive packet: type 20
  debug1: SSH2_MSG_KEXINIT received
  debug2: local client KEXINIT proposal
  debug2: KEX algorithms: curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,ext-info-c
  debug2: host key algorithms: ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp521-cert-v01@openssh.com,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ssh-ed25519,rsa-sha2-512,rsa-sha2-256,ssh-rsa
  debug2: ciphers ctos: chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,aes192-cbc,aes256-cbc,3des-cbc
  debug2: ciphers stoc: chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,aes192-cbc,aes256-cbc,3des-cbc
  debug2: MACs ctos: umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1
  debug2: MACs stoc: umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1
  debug2: compression ctos: zlib@openssh.com,zlib,none
  debug2: compression stoc: zlib@openssh.com,zlib,none
  debug2: languages ctos: 
  debug2: languages stoc: 
  debug2: first_kex_follows 0 
  debug2: reserved 0 
  debug2: peer server KEXINIT proposal
  debug2: KEX algorithms: curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1
  debug2: host key algorithms: ssh-rsa,rsa-sha2-512,rsa-sha2-256,ecdsa-sha2-nistp256,ssh-ed25519
  debug2: ciphers ctos: chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com
  debug2: ciphers stoc: chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com
  debug2: MACs ctos: umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1
  debug2: MACs stoc: umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1
  debug2: compression ctos: none,zlib@openssh.com
  debug2: compression stoc: none,zlib@openssh.com
  debug2: languages ctos: 
  debug2: languages stoc: 
  debug2: first_kex_follows 0 
  debug2: reserved 0 
  debug1: kex: algorithm: curve25519-sha256@libssh.org
  debug1: kex: host key algorithm: ecdsa-sha2-nistp256
  debug1: kex: server-&gt;client cipher: chacha20-poly1305@openssh.com MAC: &lt;implicit&gt; compression: zlib@openssh.com
  debug1: kex: client-&gt;server cipher: chacha20-poly1305@openssh.com MAC: &lt;implicit&gt; compression: zlib@openssh.com
  debug3: send packet: type 30
  debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
  debug3: receive packet: type 31
  debug1: Server host key: ecdsa-sha2-nistp256 SHA256:nj0kaJqxstRTaw8TFFAL7Xm/PiNoFjrD3I+EN0ghlHs
  debug3: hostkeys_foreach: reading file \"/home/lovea/.ssh/known_hosts\"
  debug3: record_hostkey: found key type ECDSA in file /home/lovea/.ssh/known_hosts:12
  debug3: load_hostkeys: loaded 1 keys from 192.168.138.107
  debug1: Host '192.168.138.107' is known and matches the ECDSA host key.
  debug1: Found key in /home/lovea/.ssh/known_hosts:12
  debug3: send packet: type 21
  debug2: set_newkeys: mode 1
  debug1: rekey after 134217728 blocks
  debug1: SSH2_MSG_NEWKEYS sent
  debug1: expecting SSH2_MSG_NEWKEYS
  debug3: receive packet: type 21
  debug2: set_newkeys: mode 0
  debug1: rekey after 134217728 blocks
  debug1: SSH2_MSG_NEWKEYS received
  debug2: key: /home/lovea/.ssh/ggcloud-keypair.pem ((nil)), explicit
  debug3: send packet: type 5
  debug3: receive packet: type 7
  debug1: SSH2_MSG_EXT_INFO received
  debug1: kex_input_ext_info: server-sig-algs=&lt;rsa-sha2-256,rsa-sha2-512&gt;
  debug3: receive packet: type 6
  debug2: service_accept: ssh-userauth
  debug1: SSH2_MSG_SERVICE_ACCEPT received
  debug3: send packet: type 50
  debug3: receive packet: type 51
  debug1: Authentications that can continue: publickey
  debug3: start over, passed a different list publickey
  debug3: preferred gssapi-with-mic,gssapi-keyex,hostbased,publickey
  debug3: authmethod_lookup publickey
  debug3: remaining preferred: ,gssapi-keyex,hostbased,publickey
  debug3: authmethod_is_enabled publickey
  debug1: Next authentication method: publickey
  debug1: Trying private key: /home/lovea/.ssh/ggcloud-keypair.pem
  debug3: sign_and_send_pubkey: RSA SHA256:hihJQ4rsUcRl5JCc+TxubT3QO0qumD4SYL9GgABTaaQ
  debug3: send packet: type 50
  debug2: we sent a publickey packet, wait for reply
  debug3: receive packet: type 51
  debug1: Authentications that can continue: publickey
  debug2: we did not send a packet, disable method
  debug1: No more authentication methods to try.
  Permission denied (publickey).
  ",
      "unreachable": true
  }
  </code></pre>
  
  <p>Seems to be that it doesn't like the ssh key. All I can think is that <code>become</code> isn't actually making Ansible try to connect as user <code>ubuntu</code> but is an instruction to perform once connected. Is this right? Is there some way I can connect as <code>ubuntu</code>, or do I need <code>root</code> access here?</p>