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’escriuressh-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:
- On desar-la. Prem Retorn per acceptar la ruta per defecte:
~/.ssh/id_ed25519a Linux i macOS, oC:\Users\<usuari>\.ssh\id_ed25519a Windows. Si ja en tens una amb aquest nom, et preguntarà si la vols sobreescriure: respon que no si l’estàs fent servir. - 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ó.
- 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 tipus | Tipus de clau: ed25519 (recomanat), rsa, ecdsa, o ed25519-sk per a claus de seguretat físiques (FIDO2) |
-b bits | Mida de la clau (per a RSA) |
-C comentari | Comentari de la clau |
-f fitxer | Nom i ruta del fitxer de la clau |
-N frase | Frase de pas, sense preguntar (útil en scripts; -N '' vol dir sense frase) |
-p | Canvia la frase de pas d’una clau existent |
-y | Mostra la clau pública a partir de la privada |
-l | Mostra l’empremta (fingerprint) d’una clau |
-c | Canvia el comentari |
-R servidor | Esborra 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.