Generate an SSH key pair

Best

ed25519:

ssh-keygen -t ed25519 -C "${USERNAME}@$(hostname -f)_$(uname -s | tr '[:upper:]' '[:lower:]')"

-C is an optional comment, to keep track of your keys. Can be changed with -c if you make a mistake after the key is generated.

You will be asked where to save the file and what to call it. It might make sense to have a better naming convention than the standard if you’re using multiple keys.

Second question will be the passphrase, please enter a good passphrase and if need be save it in your password manager. Do not skip this step.

Two files will be created once that is done:

  • id_ed25519 - This is you private key file, never share that one.
  • id_ed25519.pub - This is your public key and can be shared.

You can copy the file to your remote host, if password access is permitted:

And with that you should be good to go.

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

Others

Ecdsa, good fallback if ed25519 is not supported yet:

ssh-keygen -t ecdsa -b 521 -C "${USERNAME}@$(hostname -f)_$(uname -s)"

If you really need RSA for some reason:

ssh-keygen -t rsa -b 4096 -C "${USERNAME}@$(hostname -f)_$(uname -s)"

Do not use DSA keys.

Bonus

Create a shell alias to load your key with one command, can be added in your ~/.aliases:

load () {
  eval $(ssh-agent -s)
  ssh-add "${HOME}"/.ssh/id_ed25519
}

You can also use this tool to remove all keys belonging to a hostname from a known_hosts file.

ssh-keygen -R $HOSTNAME

A lot more options are available, please refer to SSH-KEYGEN(1) with man ssh-keygen or ssh-keygen --help.


Make sure to always keep your Operating System(s) and all of the software that you are using up to date.

Feedback on our content or did you find a bug somewhere?

Send us an email to feedback at this domain.

kthxbai