This error happened to me and cost me a lot of time to solve it, and couldn?t find a solution for it online, but after some help from AWS support, I managed to solve it, so I am sharing it hoping it will help others.
Background
I was trying to connect to Ubuntu AWS EC2 through PuTTy (I?ve tried other alternatives too) but when I do I get the error ?Disconnected: No supported authentication methods available (server sent: publickey)?
Troubleshooting
This error can occur under the following circumstances:
- You?re not connecting with the appropriate user name for your AMI when you negotiate an SSH session with an EC2 instance.
- You?re using the wrong private key when you negotiate an SSH session with an EC2 instance.
If you?re connecting with an appropriate user name, verify that you are using the correct private key by following these steps:
Sign in to your AWS account and open the Amazon EC2 console. In the navigation pane, choose Instances. Find the EC2 instance you want to connect to using SSH. In the Key Name column, verify the name of the private key you?re using to connect through SSH.
If you?re using PuTTY:
Verify that the SSH private key matches the private key you see in the Key Name column for your EC2 instance in the console. If your instance is based out of the Ubuntu OS, the default user name should be ubuntu. Verify that your private key (.pem) file is converted to the format recognized by PuTTY (.ppk). For more information, see Converting your Private Key Using PuTTYgen.
- permission issue with directory contains the ssh key (/home/ubuntu)
In my case, I have accidentally executed the command of sudo chmod -R 777 . for the EC2 directory ?/home/ubuntu?, so this resulted in denying the access to the EC2 and the wrong permission was like
EC2 wrong permisson
Meanwhile the right permission should be
EC2 right permission
To solve this problem I had to create recovery instance in the same A-Z as impacted instance (in case of other wrong A-Z is selected you will be not able to use + attach volume from impacted instance, which has to be attached + mounted on recovery instance to work on permissions).
- Create EC2 in the same Availability Zone of the impacted instance
- Stop the impacted instance.
- Detach the volume of the impacted instance
- Attach the volume to the new recovery instance
- Connect to recovery instance
- Mount the volume on the recovery instance as below
sudo mkdir /mountpointcd ../ lsblk # to know where the new volume is attached, in my case “/dev/xvdf1″sudo mount /dev/xvdf1/mountpoint # mount step/dev/xvdf1 # this gave me permission deniedcd /mountpoint/var/loglsnano auth.log
This will show you the cause of error which is ?Authentication refused: bad ownership or modes for file /home/ubuntu/.ssh/authorized_keys?
ls -l /mountpoint/home/ubuntu/.ssh/authorized_keys
sudo chmod 600 /mountpoint/home/ubuntu/.ssh/authorized_keysto make sure the permission has been updated executels -l /mountpoint/home/ubuntu/.ssh/authorized_keys
next step is to
ls -ld /mountpoint//home/ubuntu/.ssh/sudo chmod 700 /mountpoint/home/ubuntu/.ssh
ls -ld /mountpoint//home/ubuntusudo chmod 755 /mountpoint/home/ubuntu/
ls -ld /mountpoint//home/ubuntu
ls -ld /mountpoint//home/
Next:
- Stop the recovery instance
- Detach the volume of the impacted instance from the recovery instane
- Attach the volume to the impacted instance
- Start the impacted Instance
- Connect to the instance through PuTTY
- Voila, now you can connect properly without errors.
References:
https://chmod-calculator.com/
http://catcode.com/teachmod/
https://www.linode.com/docs/tools-reference/tools/modify-file-permissions-with-chmod/
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesConnecting.html https://aws.amazon.com/premiumsupport/knowledge-center/linux-credentials-error/