La comanda ssh

Com generar una clau SSH amb ssh-keygen



Una clau SSH és un parell de fitxers que et permet entrar als servidors sense contrasenya i de manera molt més segura: la clau privada, que es queda al teu equip i no has de compartir mai, i la clau pública, que copies als servidors on vols entrar. La comanda ssh-keygen crea aquest parell de claus, i també serveix per gestionar-les. Funciona igual a Linux, a macOS i a Windows 10/11 (des de PowerShell o el símbol del sistema).

Generar una clau: la manera recomanada avui

ssh-keygen -t ed25519 -C "joan@portatil"
  • -t ed25519: tipus de clau. Ed25519 és l’opció recomanada: segura, ràpida i amb claus curtes. A les versions actuals d’OpenSSH (des de la 9.5) és el tipus per defecte, i n’hi ha prou d’escriure ssh-keygen.
  • -C "joan@portatil": un comentari per reconèixer la clau quan en tinguis diverses (per defecte, usuari@equip).

Aquesta és la sessió completa:

$ ssh-keygen -t ed25519 -C "joan@portatil"
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/joan/.ssh/id_ed25519):
Enter passphrase for "/home/joan/.ssh/id_ed25519" (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/joan/.ssh/id_ed25519
Your public key has been saved in /home/joan/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:MAVYLUAleYXtFOmmYQhJO/ODX0HQI4DW3d7Up8Mz6hk joan@portatil
The key's randomart image is:
+--[ED25519 256]--+
| o++*O**+o.      |
|..oo++*o=. . .   |
|. +. +=*o . o    |
|   =. o=+. *     |
|  . o..+S . +    |
|   . o.  E       |
|    .   . o      |
|         o       |
|                 |
+----[SHA256]-----+

Et pregunta tres coses:

  1. On desar-la. Prem Retorn per acceptar la ruta per defecte: ~/.ssh/id_ed25519 a Linux i macOS, o C:\Users\<usuari>\.ssh\id_ed25519 a Windows. Si ja en tens una amb aquest nom, et preguntarà si la vols sobreescriure: respon que no si l’estàs fent servir.
  2. La frase de pas (passphrase). És la contrasenya que xifra la clau privada al disc. És opcional, però molt recomanable: si algú et roba el fitxer, sense la frase no el podrà fer servir. Amb l’agent SSH només l’hauràs d’escriure un cop per sessió.
  3. Repetir la frase de pas.

Al final tens dos fitxers:

$ ls -l ~/.ssh/id_ed25519*
-rw------- 1 joan joan 444 Oct  3 17:53 /home/joan/.ssh/id_ed25519
-rw-r--r-- 1 joan joan  95 Oct  3 17:53 /home/joan/.ssh/id_ed25519.pub
  • id_ed25519 és la clau privada. Fixa’t en els permisos -rw-------: només la pots llegir tu.
  • id_ed25519.pub és la clau pública: una sola línia que pots copiar on calgui.
$ cat ~/.ssh/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIATGOAD/mhB1tYAbvJmjQmeJmK+ywN8yVf3pwl6+bexP joan@portatil

I RSA?

Les guies antigues (també la versió anterior d’aquest article) feien servir ssh-keygen -t rsa -b 2048. RSA continua funcionant, però:

  • Si l’has de fer servir (per exemple, amb un servidor o un dispositiu antic que no accepti Ed25519), fes-la com a mínim de 3072 bits, que és el valor per defecte actual, o de 4096:
ssh-keygen -t rsa -b 4096
  • Les claus RSA de menys de 1024 bits ja no s’accepten, i 2048 és el mínim raonable.

Opcions més útils

OpcióQuè fa
-t tipusTipus de clau: ed25519 (recomanat), rsa, ecdsa, o ed25519-sk per a claus de seguretat físiques (FIDO2)
-b bitsMida de la clau (per a RSA)
-C comentariComentari de la clau
-f fitxerNom i ruta del fitxer de la clau
-N fraseFrase de pas, sense preguntar (útil en scripts; -N '' vol dir sense frase)
-pCanvia la frase de pas d’una clau existent
-yMostra la clau pública a partir de la privada
-lMostra l’empremta (fingerprint) d’una clau
-cCanvia el comentari
-R servidorEsborra un servidor del fitxer known_hosts

Exemples

Una clau separada per a un servidor o un servei concret (per exemple, GitHub):

ssh-keygen -t ed25519 -f ~/.ssh/github -C "joan@portatil github"

Després pots indicar quina clau s’ha de fer servir per a cada servidor a ~/.ssh/config (vegeu accés ràpid amb ~/.ssh/config).

Afegir o canviar la frase de pas d’una clau que ja tens:

ssh-keygen -p -f ~/.ssh/id_ed25519

Veure l’empremta d’una clau (per comprovar que la que hi ha al servidor és la mateixa):

$ ssh-keygen -l -f ~/.ssh/id_ed25519.pub
256 SHA256:MAVYLUAleYXtFOmmYQhJO/ODX0HQI4DW3d7Up8Mz6hk joan@portatil (ED25519)

Recuperar la clau pública si has perdut el fitxer .pub:

ssh-keygen -y -f ~/.ssh/id_ed25519 > ~/.ssh/id_ed25519.pub

Següent pas: copiar la clau pública al servidor

La clau no serveix de res fins que la copies al servidor. Des de Linux o macOS:

ssh-copy-id -i ~/.ssh/id_ed25519.pub joan@192.168.1.50

Aquesta comanda afegeix la teva clau pública al fitxer ~/.ssh/authorized_keys del servidor amb els permisos correctes. Després, ssh joan@192.168.1.50 ja no et demanarà la contrasenya del servidor (com a molt, la frase de pas de la clau). Si ets a Windows, tens els passos a accés SSH sense contrasenya entre Windows i Linux.

Un cop comprovis que entres amb la clau, pots desactivar l’accés amb contrasenya al servidor (PasswordAuthentication no, a la guia de sshd_config).

Bones pràctiques

  • La clau privada no surt mai del teu equip. Ni per correu, ni en un núvol, ni copiada al servidor. Al servidor només hi va la .pub.
  • Una clau per equip, no una mateixa clau copiada a tots els teus ordinadors. Si perds el portàtil, només hauràs de treure aquella clau dels servidors.
  • Posa-hi frase de pas i fes servir l’agent (ssh-add) per no haver-la d’escriure contínuament.
  • Si perds la clau privada no hi ha manera de recuperar-la: n’hauràs de generar una de nova i copiar-la als servidors.

Articles relacionats