Skip to main content

SSH Keys

SSH keys provide secure, password-less authentication to your ClawBook VPS. This guide covers key generation, deployment, and management.

Why Use SSH Keys?​

FeaturePasswordSSH Key
SecurityVulnerable to brute forceNearly impossible to crack
ConvenienceType every timeAutomatic login
AutomationDifficultEasy
RevocationChange password everywhereRemove single key

Key Types​

TypeSecurityCompatibilityRecommendation
Ed25519ExcellentModern systemsRecommended
RSA 4096ExcellentUniversalGood fallback
ECDSAGoodMost systemsOK
RSA 2048AdequateUniversalMinimum
DSAWeakLegacyDon't use

Generating SSH Keys​

ssh-keygen -t ed25519 -C "your@email.com"

RSA 4096 (Compatibility)​

ssh-keygen -t rsa -b 4096 -C "your@email.com"

Interactive Prompts​

Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/you/.ssh/id_ed25519): [Enter]
Enter passphrase (empty for no passphrase): [strong passphrase]
Enter same passphrase again: [repeat]

Always use a passphrase for security.

Generated Files​

~/.ssh/
├── id_ed25519 # Private key (NEVER share)
└── id_ed25519.pub # Public key (safe to share)

Deploying Keys​

Linux/macOS​

ssh-copy-id root@YOUR_VPS_IP

Windows PowerShell​

# Display public key
Get-Content ~/.ssh/id_ed25519.pub

# Connect and add manually
ssh root@YOUR_VPS_IP
mkdir -p ~/.ssh
echo "YOUR_PUBLIC_KEY" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
exit

Manual Method​

# On local machine, display public key
cat ~/.ssh/id_ed25519.pub

# On server
nano ~/.ssh/authorized_keys
# Paste the public key
# Save and exit

# Set permissions
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Testing Key Authentication​

ssh root@YOUR_VPS_IP

You should connect without entering the server password (only your key passphrase if set).

Disabling Password Authentication​

Only after confirming key login works:

# Edit SSH config
sudo nano /etc/ssh/sshd_config

# Set these options:
PasswordAuthentication no
PermitRootLogin prohibit-password
PubkeyAuthentication yes
ChallengeResponseAuthentication no
UsePAM no

# Restart SSH
sudo systemctl restart sshd
Keep Current Session Open

Test in a new terminal before closing your current session.

Managing Multiple Keys​

Different Keys for Different Servers​

# Generate server-specific key
ssh-keygen -t ed25519 -f ~/.ssh/clawbook_key -C "clawbook@example.com"

# Add to SSH config
nano ~/.ssh/config
Host clawbook
HostName YOUR_VPS_IP
User root
IdentityFile ~/.ssh/clawbook_key

Host work-server
HostName work.example.com
User admin
IdentityFile ~/.ssh/work_key

Now connect with:

ssh clawbook

SSH Agent​

Cache your key passphrase:

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

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

# Verify
ssh-add -l

Key Rotation​

Rotate keys periodically for security:

Generate New Key​

ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_new -C "your@email.com"

Add New Key to Server​

ssh-copy-id -i ~/.ssh/id_ed25519_new.pub root@YOUR_VPS_IP

Test New Key​

ssh -i ~/.ssh/id_ed25519_new root@YOUR_VPS_IP

Remove Old Key​

# On server
nano ~/.ssh/authorized_keys
# Delete line with old key

Replace Local Key​

mv ~/.ssh/id_ed25519 ~/.ssh/id_ed25519_old
mv ~/.ssh/id_ed25519_new ~/.ssh/id_ed25519
mv ~/.ssh/id_ed25519_new.pub ~/.ssh/id_ed25519.pub

Revoking Access​

Remove Single Key​

# On server
nano ~/.ssh/authorized_keys
# Find and delete the specific key line

Identify Keys​

Each key has a comment at the end:

ssh-ed25519 AAAA...xyz your@email.com

Remove All Keys​

# Nuclear option - removes all authorized keys
rm ~/.ssh/authorized_keys
warning

Ensure you have another way to access the server before doing this.

Security Best Practices​

Key Protection​

  1. Use strong passphrases - 20+ characters
  2. Never share private keys - Even with colleagues
  3. Use different keys - Per device and per purpose
  4. Backup keys securely - Encrypted storage only
  5. Rotate regularly - Every 6-12 months

Passphrase Tips​

Good passphrase:

correct-horse-battery-staple-2026!

Bad passphrase:

password123

Physical Security​

  • Don't leave sessions logged in
  • Lock your computer
  • Use full disk encryption
  • Don't store keys on shared computers

Troubleshooting​

Permission Denied (publickey)​

# Check key is being offered
ssh -v root@YOUR_VPS_IP

# Verify permissions
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub

# On server
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Agent Forwarding Issues​

# Enable in SSH config
Host clawbook
ForwardAgent yes

# Or use -A flag
ssh -A root@YOUR_VPS_IP

Key Not Accepted​

Check:

  1. Key is in authorized_keys
  2. Permissions are correct
  3. Key type is supported
  4. PubkeyAuthentication yes in sshd_config

Wrong Key Being Used​

Specify key explicitly:

ssh -i ~/.ssh/specific_key root@YOUR_VPS_IP

Advanced: Hardware Keys​

YubiKey​

Generate key on YubiKey:

ssh-keygen -t ed25519-sk -C "yubikey@example.com"

FIDO2 Keys​

ssh-keygen -t ecdsa-sk -C "fido2@example.com"

Requires OpenSSH 8.2+ and compatible hardware.

Next Steps​