Introduction

Changing laptops is exciting, but it comes with a critical task: migrating your SSH keys. These keys are your digital identity—they grant you access to servers, GitHub, AWS, and countless other services. Lose them, and you’ll be locked out of everything, spending hours or days re-establishing access.

In this guide, I’ll show you how to safely backup and restore your SSH keys when switching to a new laptop, following security best practices.

The Core Principle: Your Keys Are Your Identity

Before we dive into the mechanics, understand this fundamental truth:

Key TypeWhat It DoesSharing Rule
Private Key (id_ed25519id_rsa)Proves your identity🔒 NEVER SHARE
Public Key (id_ed25519.pubid_rsa.pub)Identifies you to servers✅ Safe to share

When migrating laptops, you’re moving your identity, not creating a new one. This is perfectly acceptable—you are still you, just on a different machine .

Method 1: The Simple Copy Method (Most Common)


Step 1: Locate Your SSH Keys

On your old laptop, your SSH keys live in ~/.ssh/:

ls -la ~/.ssh/

You’ll see files like:

  • id_ed25519 – 🔒 Your private key (NEVER share this)
  • id_ed25519.pub – ✅ Your public key
  • id_rsa – 🔒 Alternative private key format
  • id_rsa.pub – ✅ Alternative public key
  • config – Your SSH configuration file
  • known_hosts – Recorded server fingerprints


Step 2: Copy the Files Securely

Option A: Using a USB Drive (Air-Gap Method)

# On old laptop, copy to USB
cp -a ~/.ssh /media/usb/ssh-backup/

# On new laptop, copy from USB with correct permissions
cp -a /media/usb/ssh-backup/.ssh ~/

The -a flag preserves file permissions, which is crucial for SSH .

Option B: Using scp Over Network

# From new laptop, pull the files from old laptop
scp -r user@old-laptop:~/.ssh ~/

Option C: Using Encrypted Archive

Create an encrypted backup using 7zip :

# On old laptop - create encrypted archive
7z a -t7z -m0=lzma2 -mx=9 -mhe=on ~/ssh-backup-$(date +%Y-%m-%d).7z ~/.ssh -p

# Transfer to new laptop via USB or cloud, then extract
7z x ssh-backup-*.7z

This command:

  • -mhe=on – Encrypts file headers (hides filenames)
  • -p – Prompts for a strong password
  • -mx=9 – Maximum compression


Step 3: Fix Permissions on New Laptop

This is the most common pitfall. SSH is extremely strict about file permissions :

# Set correct permissions
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_*           # All private keys
chmod 644 ~/.ssh/*.pub           # All public keys
chmod 600 ~/.ssh/{authorized_keys,config,known_hosts} 2>/dev/null


Step 4: Add Keys to ssh-agent

# On Linux
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519

# On macOS
ssh-add --apple-use-keychain ~/.ssh/id_ed25519


Step 5: Test Your Access

# Test GitHub (if applicable)
ssh -T git@github.com

# Test your servers
ssh user@your-server.com


Method 2: The Professional Approach with SSH-Sync

For those managing multiple machines, ssh-sync automates key synchronization .


Installation

# On macOS
brew tap therealpaulgg/ssh-sync
brew install ssh-sync

# On Ubuntu/Debian
wget <link-to-.deb-file>
sudo dpkg -i ssh-sync*.deb


Setup and Use

# Initialize
ssh-sync setup

# Upload keys from old machine
ssh-sync upload

# Download keys to new machine
ssh-sync download

ssh-sync handles conflict resolution and securely stores your keys encrypted .


Method 3: Manual Backup with Version Control

For those who want maximum control :


Create a Backup Script

#!/bin/bash
# save-ssh-backup.sh

BACKUP_DIR=~/ssh-backups
DATE=$(date +%Y%m%d)

mkdir -p $BACKUP_DIR

# Create encrypted tar archive
tar -czf - ~/.ssh | \
  gpg --symmetric --cipher-algo AES256 -o $BACKUP_DIR/ssh-backup-$DATE.tar.gz.gpg

echo "Backup saved to $BACKUP_DIR/ssh-backup-$DATE.tar.gz.gpg"


Restore from Backup

# Decrypt and extract
gpg -d ssh-backup-*.tar.gz.gpg | tar -xzf - -C ~/
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_*


Critical Security Considerations


1. Never Email Your Keys

Email is not encrypted end-to-end in transit and stores copies on multiple servers .


2. Always Use Strong Encryption

ToolCommandStrength
7zip7z a -p -mhe=onAES-256
GPGgpg -c --cipher-algo AES256AES-256
OpenSSLopenssl enc -aes-256-cbcAES-256


3. Securely Erase Old Laptop

After confirming your new laptop works:

# On old laptop, securely remove keys
shred -u ~/.ssh/id_*

# Or use secure-delete
sudo apt install secure-delete
srm -r ~/.ssh


4. Document Your Key Inventory

Create a simple inventory :

# List all keys and where they're used
for key in ~/.ssh/id_*; do
    if [[ ! "$key" == *.pub ]]; then
        echo "🔑 Private key: $(basename $key)"
        echo "   Public key: $(basename $key).pub"
        echo "   Fingerprint: $(ssh-keygen -lf $key)"
        echo "---"
    fi
done


What About the Public Key Comment?

The comment at the end of your public key (e.g., user@old-laptop) is informational only. When you move to a new laptop, you can:

  1. Keep it as-is – Still works perfectly 
  2. Update it – Edit the .pub file (safe, doesn’t affect functionality)
  3. Ignore it – It’s just for your reference


Comparison of Backup Methods

MethodSecurityEaseBest For
USB CopyHigh (air-gapped)EasySingle machine migration
SCP/rsyncMedium (network)EasyTech-savvy users
Encrypted ArchiveVery HighModerateSecurity-conscious
ssh-syncHighVery EasyMulti-machine users
Version ControlVery HighComplexAuditing requirements


Common Pitfalls and Solutions

Pitfall 1: Permission Errors

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0664 for 'id_rsa' are too open.

Fix: 

chmod 600 ~/.ssh/id_rsa

Pitfall 2: SSH Agent Doesn’t Remember Keys

Fix on macOS: 

ssh-add --apple-use-keychain ~/.ssh/id_ed25519

Fix on Linux:

ssh-add ~/.ssh/id_ed25519


Pitfall 3: Lost Keys After Migration

Prevention: Always test before wiping old laptop :

# Keep old laptop powered off but available until you've confirmed
# everything works on the new machine


Step-by-Step Migration Checklist


Before Migrating (On Old Laptop)

  • Identify all SSH keys: ls -la ~/.ssh/
  • Note which keys access which servers
  • Create encrypted backup
  • Test backup integrity


Migration Day

  • Transfer backup via secure medium
  • Restore to new laptop
  • Fix permissions: chmod 600 ~/.ssh/id_*
  • Add to ssh-agent
  • Test critical connections


After Verification

  • Securely wipe keys from old laptop
  • Document key inventory for future reference
  • Update any key comments if desired


Conclusion

Migrating SSH keys to a new laptop is not only possible—it’s the recommended practice. You are the same person with the same identity, and your keys represent that identity .

The key takeaways:

  1. Copy, don’t recreate – Your existing keys work perfectly on new hardware
  2. Secure the transfer – Use encryption for any digital transfer
  3. Fix permissions – This is the most common post-migration issue
  4. Test before wiping – Keep the old machine as a backup until verified
  5. Document everything – Know what keys you have and where they’re used

By following these practices, you can migrate between laptops seamlessly, maintaining access to all your servers and services without the headache of re-establishing trust with every system.