About this tool
An SSH key pair consists of a public key you upload to servers (into `~/.ssh/authorized_keys` on the server, or as a deploy key on GitHub/GitLab) and a private key you keep secret on your own machine. When you connect, the server challenges your client to prove it holds the private key matching the public key it already has on file — without the private key itself ever being transmitted. Ed25519 is the modern default: it uses much shorter keys than RSA (a 256-bit key rather than 2048+ bits) while offering comparable or better security, and it is faster to generate and verify. RSA remains offered here for compatibility with older servers, embedded devices, and enterprise policies that have not yet moved past it.
Every byte of this generator runs through your browser's built-in WebCrypto API — the same cryptographic engine used by HTTPS, WebAuthn and other browser security features. Nothing you generate here is sent to any server: the key pair, its OpenSSH-formatted public key, its PEM-encoded private key and its SHA-256 fingerprint are all produced, encoded and displayed locally in this tab, and disappear the moment you navigate away or reload (unlike some other tools on this site, this page does not persist your keys in `localStorage`). Download the `.pub` file into your server's `authorized_keys`, download the private key into `~/.ssh/` with `chmod 600`, and compare the fingerprint against `ssh-keygen -lf` output to confirm nothing was altered in transit.
Frequently asked questions
Should I use Ed25519 or RSA?
Ed25519 is the modern recommendation: smaller keys, faster operations, and equally strong security, and it's supported by all current versions of OpenSSH. Use RSA (4096-bit) only if you must connect to a much older server that lacks Ed25519 support.
How do I install the public key on a server?
Append the downloaded .pub file's contents to ~/.ssh/authorized_keys on the server (or use `ssh-copy-id` from your terminal if you saved the private key locally too), then keep the private key file secret and reference it with `ssh -i path/to/key user@host`.