🎁 New User? Get 20% off your first purchase with code NEWUSER20 Register Now →
Menu

Categories

Complete Guide to SSH Key Authentication: Secure Your Linux Servers

Complete Guide to SSH Key Authentication: Secure Your Linux Servers

If you're still using password authentication to access your Linux servers, you're not only making your life harder but also leaving your systems vulnerable. SSH key authentication is more secure, more convenient, and a fundamental skill for any system administrator or DevOps engineer.

Why SSH Keys Are Better Than Passwords

  • Immune to Brute Force - Keys are virtually impossible to crack
  • No Password to Remember - Authenticate with a file instead
  • Automation-Friendly - Essential for scripts and CI/CD pipelines
  • Passphrase Protection - Add an extra layer with encrypted keys
  • Central Management - Control access by managing authorized keys

Understanding SSH Key Pairs

SSH authentication uses asymmetric cryptography with two keys:

  • Private Key - Stays on your local machine, never shared
  • Public Key - Placed on servers you want to access

When you connect, your private key proves your identity without ever being transmitted over the network.

Step 1: Generate Your SSH Key Pair

Recommended: Ed25519 Algorithm

ssh-keygen -t ed25519 -C "your_email@example.com"

Ed25519 is the modern standard - faster, more secure, and produces smaller keys than RSA.

Alternative: RSA (for legacy systems)

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

Key Generation Prompts

  1. File location - Press Enter for default (~/.ssh/id_ed25519)
  2. Passphrase - Highly recommended! Adds encryption to your private key

Step 2: Copy Your Public Key to the Server

Method 1: ssh-copy-id (Easiest)

ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server-ip

This automatically appends your public key to the server's ~/.ssh/authorized_keys file.

Method 2: Manual Copy

# Display your public key
cat ~/.ssh/id_ed25519.pub

# On the server, add to authorized_keys
mkdir -p ~/.ssh
echo "your-public-key-content" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh

Step 3: Configure SSH Daemon Security

Edit /etc/ssh/sshd_config on your server:

# Disable password authentication
PasswordAuthentication no

# Disable root login (use sudo instead)
PermitRootLogin no

# Only allow specific users
AllowUsers your_username

# Use modern crypto
KexAlgorithms curve25519-sha256@libssh.org
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com
MACs hmac-sha2-512-etm@openssh.com

Apply changes:

sudo systemctl restart sshd

Step 4: Configure Your SSH Client

Create or edit ~/.ssh/config for convenient connections:

Host myserver
    HostName 192.168.1.100
    User admin
    IdentityFile ~/.ssh/id_ed25519
    Port 22

Host production
    HostName prod.example.com
    User deploy
    IdentityFile ~/.ssh/deploy_key
    Port 2222

Now simply type ssh myserver instead of the full command!

Using SSH Agent for Passphrase Management

If you set a passphrase, use SSH agent to avoid typing it repeatedly:

# Start SSH agent
eval "$(ssh-agent -s)"

# Add your key
ssh-add ~/.ssh/id_ed25519

# List loaded keys
ssh-add -l

Best Practices for SSH Key Security

1. Use Strong Passphrases

Your passphrase protects your private key if it's stolen. Use a memorable but complex phrase.

2. Different Keys for Different Purposes

ssh-keygen -t ed25519 -f ~/.ssh/work_key -C "work"
ssh-keygen -t ed25519 -f ~/.ssh/personal_key -C "personal"

3. Rotate Keys Periodically

Generate new keys annually and remove old ones from authorized_keys.

4. Secure File Permissions

chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub
chmod 600 ~/.ssh/authorized_keys

5. Audit Authorized Keys

Regularly review which keys have access to your servers.

Troubleshooting Common Issues

Permission Denied (publickey)

  • Check file permissions on .ssh directory and files
  • Verify public key is in authorized_keys
  • Check sshd_config allows key authentication

Agent Has No Identities

ssh-add ~/.ssh/id_ed25519

Too Many Authentication Failures

Specify the correct key:

ssh -i ~/.ssh/specific_key user@host

Conclusion

SSH key authentication is essential for secure server access. By disabling password authentication and following the best practices outlined here, you'll significantly improve your security posture while making your daily workflow more efficient.

Ready to master Linux security? Check out our Security & Hardening books for comprehensive guides on protecting your infrastructure.

Share this article:

Stay Updated

Subscribe to our newsletter for the latest tutorials, tips, and exclusive offers.