Keywords: AWS | SSH | File Permissions | PuTTY | Troubleshooting
Abstract: This paper provides an in-depth analysis of the 'Disconnected: No supported authentication methods available (server sent: publickey)' error when connecting to AWS EC2 instances via SSH. Based on high-scoring Stack Overflow answers and AWS official documentation, it systematically examines key factors including file permission configuration, key format conversion, and username matching. The article includes detailed troubleshooting steps and code examples, with particular emphasis on the importance of correct permission settings for .ssh directories and authorized_keys files in SSH authentication.
Problem Description and Background
When connecting to AWS EC2 instances using PuTTY or FileZilla, users frequently encounter the following error message:
Disconnected: No supported authentication methods available (server sent: publickey)
This error indicates that the SSH client cannot provide an authentication method accepted by the server. While the error message is relatively generic, specific configuration issues are often the root cause in AWS environments.
Core Issue Analysis: File Permission Configuration
According to high-scoring answers from the Stack Overflow community, improper file system permissions are one of the most common causes of this error. The SSH service has strict security requirements for permissions on related files and directories.
Correct permission configuration example:
/home/ec2-user/ - 700
/home/ec2-user/.ssh/ - 700
/home/ec2-user/.ssh/authorized_keys - 600
Let's verify and fix permission issues using a Python script:
import os
import stat
def check_ssh_permissions(home_dir):
"""Check permissions for SSH-related directories and files"""
ssh_dir = os.path.join(home_dir, '.ssh')
auth_keys = os.path.join(ssh_dir, 'authorized_keys')
# Check directory permissions
home_perms = oct(os.stat(home_dir).st_mode)[-3:]
ssh_perms = oct(os.stat(ssh_dir).st_mode)[-3:]
# Check file permissions
if os.path.exists(auth_keys):
key_perms = oct(os.stat(auth_keys).st_mode)[-3:]
else:
key_perms = 'File does not exist'
return {
'home_directory': home_perms,
'ssh_directory': ssh_perms,
'authorized_keys': key_perms
}
def fix_permissions(home_dir):
"""Fix SSH-related permissions"""
ssh_dir = os.path.join(home_dir, '.ssh')
auth_keys = os.path.join(ssh_dir, 'authorized_keys')
try:
# Set home directory permissions to 700
os.chmod(home_dir, stat.S_IRWXU)
# Set .ssh directory permissions to 700
if os.path.exists(ssh_dir):
os.chmod(ssh_dir, stat.S_IRWXU)
# Set authorized_keys permissions to 600
if os.path.exists(auth_keys):
os.chmod(auth_keys, stat.S_IRUSR | stat.S_IWUSR)
return "Permissions fixed successfully"
except Exception as e:
return f"Permission fix failed: {str(e)}"
Other Common Causes and Solutions
Username Mismatch
Different Amazon Machine Images (AMIs) use different default usernames:
- Amazon Linux AMI:
ec2-user - Ubuntu AMI:
ubuntuorroot - CentOS AMI:
centos - RHEL AMI:
ec2-userorroot
Key Format Issues
PuTTY does not support AWS native PEM format keys and requires conversion using PuTTYgen:
# Correct PuTTYgen usage process:
# 1. Open PuTTYgen
# 2. Select "Conversions" -> "Import key"
# 3. Load PEM file
# 4. Directly click "Save private key" (do not click Generate)
# 5. Save as PPK format
User Home Directory Changes
When using the usermod -d command to change a user's home directory, ensure the new home directory and its .ssh subdirectory have correct permission settings.
System Log Analysis
Detailed error information can be obtained by examining the /var/log/secure log file:
# View SSH authentication logs
tail -f /var/log/secure | grep sshd
Typical permission error logs may display:
Authentication refused: bad ownership or modes for directory /home/ec2-user/.ssh
Troubleshooting Process
- Verify instance IP address is correct (EC2 restart may change IP)
- Check if username matches AMI type
- Confirm PuTTY is using correct PPK format key
- Validate file system permission configuration
- Check
/var/log/securefor detailed error information - Update PuTTY to latest version if necessary
Emergency Recovery Solutions
If completely unable to connect, refer to AWS official key pair recovery tutorial videos to regain access through the EC2 instance console.
Conclusion
AWS SSH connection failures typically stem from configuration issues rather than network problems. Through systematic permission checks, key format verification, and log analysis, most issues can be quickly identified and resolved. Maintaining strict permission management and proper tool configuration is key to ensuring stable SSH connections.