Skip to content

SSH Key Generation on ChromeOS

The ssh-keygen command is a powerful tool for generating SSH key pairs, which provide secure and passwordless authentication for remote servers. This guide walks through the process of generating and managing SSH keys within the ChromeOS Linux environment.

What is SSH Key Authentication?

SSH key authentication uses a pair of cryptographic keys:

  • Private Key: Stays secure on your local machine.
  • Public Key: Is shared with the remote server.

Once configured, the private key authenticates you to the server, eliminating the need for passwords while enhancing security.


Generating SSH Keys with ssh-keygen

The ssh-keygen command generates a key pair and stores them in a secure location.

Default Key Generation

To generate a new SSH key pair with default options:

ssh-keygen

You’ll be prompted to:

  1. Specify the File Location (default is ~/.ssh/id_rsa). Press Enter to accept the default or provide a custom path.
  2. Set a Passphrase (optional): You can add an extra layer of security by setting a passphrase. Leave it blank for no passphrase.

Example Output:

Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user/.ssh/id_rsa
Your public key has been saved in /home/user/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:exampleFingerprint user@hostname
The key's randomart image is:
+---[RSA 4096]----+
|                 |
|    o o          |
|   o + o         |
|  . * o .        |
|  ..=o S         |
| .oo=o  .        |
|.o.= o. .        |
|o*Eo+.o.         |
|oo+=o= .         |
+----[SHA256]-----+

Key File Locations

  • Private Key:
  • Path: ~/.ssh/id_rsa
  • Keep this file secure and do not share it.

  • Public Key:

  • Path: ~/.ssh/id_rsa.pub
  • Share this with remote servers for authentication.

Changing the Default File Name

If you wish to create a key with a custom name (e.g., for a specific project):

ssh-keygen -f ~/.ssh/my_custom_key

Key Algorithms

You can specify the type of key algorithm during key generation. Common options include:

  • RSA (default):

    ssh-keygen -t rsa -b 4096
    
  • ED25519 (recommended for most use cases):

    ssh-keygen -t ed25519
    
  • ECDSA:

    ssh-keygen -t ecdsa -b 521
    

Adding the Public Key to Remote Servers

After generating your SSH keys, copy the public key to the remote server:

ssh-copy-id user@hostname

Alternatively, you can manually copy the contents of ~/.ssh/id_rsa.pub to the remote server’s ~/.ssh/authorized_keys file.


Managing Existing Keys

List Available Keys

To view all existing SSH keys:

ls ~/.ssh

Add Keys to SSH Agent

If your private key requires a passphrase, you can add it to the SSH agent to avoid repeated prompts:

  1. Start the SSH agent:

    eval $(ssh-agent -s)
    
  2. Add your private key:

    ssh-add ~/.ssh/id_rsa
    

Deleting an Old Key Pair

To delete an old or unused key pair:

rm ~/.ssh/id_rsa ~/.ssh/id_rsa.pub

Replace id_rsa with the specific key name if it differs.


Best Practices for SSH Key Management

  1. Use Strong Passphrases: Protect private keys with a strong passphrase.
  2. Restrict Key Permissions:
  3. Private keys should have 600 permissions:
    chmod 600 ~/.ssh/id_rsa
    
  4. The .ssh directory should have 700 permissions:
    chmod 700 ~/.ssh
    
  5. Use Separate Keys for Different Servers: For enhanced security, generate unique keys for each server or purpose.
  6. Backup Your Keys: Securely back up private keys to prevent loss.

Troubleshooting

Permission Denied Errors

Ensure the private key file has the correct permissions:

chmod 600 ~/.ssh/id_rsa

SSH Key Not Found

Specify the key explicitly when connecting:

ssh -i ~/.ssh/custom_key user@hostname

SSH Agent Issues

If the SSH agent isn’t running, start it manually:

eval $(ssh-agent -s)

By mastering the ssh-keygen command and following these guidelines, ChromeOS users can establish secure, efficient connections to remote servers and streamline their workflows.