Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SSH Error: Permission denied (publickey,password) in Ansible

Tags:

ssh

ansible

I am new to Ansible and I am trying to implement it. I tried all the possible ways present on the Internet and also all questions related to it, but still I can't resolve the error. How can I fix it?

I installed Ansible playbook on my MacBook Pro. I created a VM whose IP address is 10.4.1.141 and host IP address is 10.4.1.140.

I tried to connect to my VM using the host via SSH. It connected by the following command:

ssh [email protected]

And I got the shell access. This means my SSH connection is working fine.

Now I tried the following command for Ansible:

ansible all -m ping

And the content in the /etc/ansible/host is 10.4.1.141.

Then it shows the following error:

10.4.1.141 | FAILED => SSH Error: Permission denied (publickey,password).

while connecting to 10.4.1.141:22

It is sometimes useful to rerun the command using -vvvv, which prints SSH debug output to help diagnose the issue.

Then I tried creating the config file in .ssh/ folder on the host machine, but the error is still the same.

The content of the config file is:

  IdentityFile ~/.ssh/id_rsa

which is the path to my private key.

Then I ran the same command ansible all -m ping and got the same error again.

When I tried another command,

ansible all -m ping -u user --ask-pass

Then it asked for the SSH password. I gave it (I am very sure the password is correct), but I got this error:

10.4.1.141 | FAILED => FAILED: Authentication failed.

This is the log using -vvvv:

<10.4.1.141> ESTABLISH CONNECTION FOR USER: rajatg
<10.4.1.141> REMOTE_MODULE ping
<10.4.1.141> EXEC ssh -C -tt -vvv -o ControlMaster=auto -o ControlPersist=60s -o ControlPath="/Users/rajatg/.ansible/cp/ansible-ssh-%h-%p-%r" -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 10.4.1.141 /bin/sh -c 'mkdir -p $HOME/.ansible/tmp/ansible-tmp-1445512455.7-116096114788007 && chmod a+rx $HOME/.ansible/tmp/ansible-tmp-1445512455.7-116096114788007 && echo $HOME/.ansible/tmp/ansible-tmp-1445512455.7-116096114788007'
10.4.1.141 | FAILED => SSH Error: Permission denied (publickey,password).
    while connecting to 10.4.1.141:22
It is sometimes useful to re-run the command using -vvvv, which prints SSH debug output to help diagnose the issue.

I am still not able to figure it out what the problem is. It is my last choice to ask it here after doing my all research. This is the link I referred to.

like image 559
Rajat Gupta Avatar asked Oct 22 '15 11:10

Rajat Gupta


People also ask

How do I fix SSH permission denied Publickey?

Solution 1: Enable Password Authentication If you want to use a password to access the SSH server, a solution for fixing the Permission denied error is to enable password login in the sshd_config file. In the file, find the PasswordAuthentication line and make sure it ends with yes .

What does SSH permission denied Publickey mean?

"Permission denied (publickey)" and "Authentication failed, permission denied" errors occur if: You're trying to connect using the wrong user name for your AMI. The file permissions within the operating system are incorrect on the instance. The incorrect SSH public key (. pub) file is in the authorized_keys file.

What SSH key does Ansible use?

By default, Ansible uses native OpenSSH, because it supports ControlPersist (a performance feature), Kerberos, and options in ~/. ssh/config such as Jump Host setup.


4 Answers

I fixed the issue. The problem was in my /etc/ansible/hosts file.

The content written in /etc/ansible/hosts was 10.4.1.141. But when I changed it to [email protected], then the issue got fixed.

like image 158
Rajat Gupta Avatar answered Oct 09 '22 09:10

Rajat Gupta


If you log in with ssh [email protected]:

Option 1

Then make sure that in your hosts file inside etc\ansible you have:

[server01] 10.4.1.141 

Then within etc\ansible run:

ansible all -m ping -u user --ask-pass 

Option 2

If you want to log in without typing the SSH password then in your hosts file inside etc\ansible you add:

[server01] 10.4.1.141 ansible_ssh_pass=xxx ansible_ssh_user=user 

Then within etc\ansible run:

ansible all -m ping 

For me it worked both ways.

like image 36
bebs Avatar answered Oct 09 '22 07:10

bebs


The previous solutions didn't work for me, unfortunately (DevOps layman here!).

But the below one worked for me.

Change your inventory file to:

[webserver] 10.4.1.141 ansible_user=ubuntu

ansible webserver --private-key pem_file.pem -m ping

Hitting the command with -vvvv helped me to debug it more.

Reference: Failed to connect to the host via ssh: Permission denied (publickey,password) #19584

like image 20
Nätu Avatar answered Oct 09 '22 08:10

Nätu


If you execute Ansible with sudo, for example

sudo ansible -m ping all

Please keep in mind that the public key for root has to be on the server you want to reach as well, not only the public key from your non-root-user. Otherwise, you get the error message above as well.

like image 44
Jan Clemens Stoffregen Avatar answered Oct 09 '22 09:10

Jan Clemens Stoffregen