Fixing “Load key: invalid format” Error When Using AWS-Generated SSH Keys


3 views

I recently encountered an irritating issue with an AWS-generated SSH key that previously worked perfectly. The key file (key_name) had the correct permissions (600) and was stored securely in LastPass, but suddenly stopped working with the cryptic error:

Load key "key_name": invalid format

After some investigation, I found several potential causes for this error with AWS-generated keys:

  • The key file might have been corrupted during transfer/storage
  • Extra whitespace or invisible characters added
  • The file might have been saved with Windows line endings
  • The private key might be missing the proper headers/footers

First, let's examine the key file structure. A proper PEM-format private key should look like:

-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEAz7eTj3p4e7h6w9XuK4eX6g9XuK4eX6g9XuK4eX6g9XuK4eX6
...
-----END RSA PRIVATE KEY-----

To check your file's basic structure:

head -n 3 key_name
tail -n 3 key_name

Solution 1: Convert line endings

dos2unix key_name

Solution 2: Verify and fix permissions

chmod 600 key_name

Solution 3: Reformat the key file

ssh-keygen -f key_name -e -m pem > key_name.pem
mv key_name.pem key_name

If the above doesn't work, try extracting the public key and comparing:

ssh-keygen -y -f key_name > key_name.pub

Compare this with what AWS shows in the EC2 key pairs section. If they don't match, the private key is corrupted.

For better key management:

  • Store keys in .pem format
  • Use SSH agent forwarding when possible
  • Consider using AWS Session Manager instead of direct SSH
  • Regularly rotate and validate keys

Remember that AWS provides key pairs only once during creation - if you lose the private key, you'll need to replace it.


Recently, I encountered an issue where my previously working AWS SSH key suddenly started throwing an "invalid format" error. The key was stored in LastPass and had worked perfectly before. The error appeared when trying to connect using:

ssh -i key_name user@example.com

And the exact error message was:

Load key "key_name": invalid format

After some research and troubleshooting, I found several potential causes for this error:

  • The key file might have been corrupted during storage/retrieval
  • Extra characters or line breaks might have been added
  • The key might have been saved in an incompatible format
  • File permissions might be incorrect (though this usually shows a different error)

First, let's check if the key is in the correct format. A proper private key should start with:

-----BEGIN RSA PRIVATE KEY-----

Or for newer keys:

-----BEGIN OPENSSH PRIVATE KEY-----

You can inspect the key file with:

head -n 1 key_name

If the key appears corrupted, try these solutions:

1. Reformatting the Key

Sometimes password managers add extra line breaks. Try reformatting with:

ssh-keygen -f key_name -e -m pem > key_name.pem
mv key_name.pem key_name

2. Converting Between Formats

If the key is in the wrong format, convert it:

ssh-keygen -p -f key_name -m pem

3. Regenerating the Public Key

Sometimes the public key can help validate the private key:

ssh-keygen -y -f key_name > key_name.pub

To avoid similar problems:

  • Store keys in a secure but accessible location
  • Keep backups in different formats
  • Regularly test your keys
  • Consider using SSH agents

After making changes, verify the key works with:

ssh -i key_name -v user@example.com

The verbose output (-v) will help identify any remaining issues.