How to Connect to Remote Servers Without Typing a Password
As an operations engineer, I've spent years SSHing into remote servers. The frustration of typing passwords on cold terminals at 3 AM is real. Then I discovered SSH key authentication — and never looked back.
Today I'll show you how to set it up in under 5 minutes. No GUI tools, no expensive software. Just the command line.
Why SSH Keys Beat Passwords
Before we dive in, here's why this matters:
- Brute-force resistant: A 4096-bit RSA key has more combinations than atoms in the observable universe (well, close enough)
-
Convenient: One
ssh user@hostand you're in — no typing passwords - Audit-friendly: Each key is traceable to a specific person/machine
- Automation-ready: Scripts, CI/CD pipelines, Ansible playbooks — all love key auth
And yes, password auth still has its place (temporary access, shared machines). But for anything you touch regularly, keys are the way to go.
Step 1: Generate Your Key Pair
Open your terminal and run:
ssh-keygen -t ed25519 -C "your_email@example.com"
Why Ed25519? It's faster and more secure than the old RSA default. If you're working with legacy systems that don't support it, fall back to ssh-keygen -t rsa -b 4096.
You'll be asked three questions:
-
File location: Just press Enter to use the default (
~/.ssh/id_ed25519) - Passphrase: Strongly recommended. This encrypts your private key on disk. Use a password manager if you need help remembering one.
- Confirm passphrase: Type it again
You now have two files:
-
~/.ssh/id_ed25519— your private key (keep this secret) -
~/.ssh/id_ed25519.pub— your public key (share this freely)
Step 2: Copy the Public Key to the Server
The easiest method uses ssh-copy-id:
ssh-copy-id username@server_ip
You'll be prompted for the server password one last time. That's it — the public key gets appended to ~/.ssh/authorized_keys on the remote machine.
Manual Method (if ssh-copy-id isn't available)
# Show your public key
cat ~/.ssh/id_ed25519.pub
# SSH into the server and append it manually
ssh username@server_ip "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
# Then paste the output from the previous command
Step 3: Test and Lock It Down
Before disabling password auth, test your new key:
ssh username@server_ip
If it logs you in without a password prompt, you're golden. If not, check:
- File permissions:
chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys - The public key is on one line in
authorized_keys - You're using the right private key:
ssh -i ~/.ssh/id_ed25519 username@server_ip
Once confirmed, harden the server:
sudo nano /etc/ssh/sshd_config
Set:
PasswordAuthentication no
PubkeyAuthentication yes
Then restart: sudo systemctl restart sshd
Warning: Keep your current session open while testing! If something goes wrong, you can fix it before locking yourself out.
Bonus: Managing Multiple Keys
As your infrastructure grows, you'll accumulate keys. Here's how to stay sane:
~/.ssh/config file:
Host production
HostName 192.168.1.100
User deploy
IdentityFile ~/.ssh/id_production
Host staging
HostName staging.example.com
User admin
IdentityFile ~/.ssh/id_staging
Then just ssh production or ssh staging.
Key rotation: Every 90 days, generate new keys and rotate them. Old keys go in a revoked_keys file on servers (check before authorized_keys).
Troubleshooting Cheat Sheet
| Symptom | Fix |
|---|---|
| "Permission denied (publickey)" | Check permissions: chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys
|
| "Agent admitted failure to sign" | ssh-add ~/.ssh/id_ed25519 |
| Key works locally but not from script | Use ssh-agent or IdentityFile in config |
| "Too many authentication failures" | Use -o IdentitiesOnly=yes flag |
The Bottom Line
SSH key authentication takes 5 minutes to set up and pays dividends for years. No more password fatigue, no more brute-force worries, just clean secure access.
Full guide with screenshots and edge cases: https://ops.jiunotes.top/ssh-key-auth-setup
More DevOps notes: ops.jiunotes.top
Top comments (0)