Si et connectes sovint als mateixos servidors, acabaràs escrivint una vegada i una altra coses com ssh -p 2222 -i ~/.ssh/clau_web joan@203.0.113.10. Amb el fitxer ~/.ssh/config pots desar aquestes dades amb un nom curt i connectar-te només amb ssh web. Si a més fas servir claus en lloc de contrasenyes, l’accés és immediat. En aquest article veuràs com configurar-ho a Linux (i macOS) i a Windows, que avui fa servir el mateix OpenSSH.
Pas 1: tingues una clau SSH
Si encara no en tens, genera’n una. El tipus recomanat avui és Ed25519 (és el que fa ssh-keygen per defecte a les versions recents d’OpenSSH):
ssh-keygen -t ed25519 -C "joan@portatil"
Accepta la ruta per defecte (~/.ssh/id_ed25519) i posa-hi una frase de pas. Les guies antigues recomanen -t rsa -b 2048: RSA de 2048 bits encara és acceptable, però Ed25519 és més curta, més ràpida i més segura. Tens tots els detalls a com generar una clau SSH amb ssh-keygen.
Pas 2: copia la clau pública al servidor
ssh-copy-id -i ~/.ssh/id_ed25519.pub joan@203.0.113.10
Et demanarà la contrasenya del servidor per última vegada. A partir d’ara, entraràs amb la clau.
Pas 3: crea el fitxer ~/.ssh/config
Obre (o crea) el fitxer ~/.ssh/config amb el teu editor i afegeix-hi un bloc per a cada servidor:
Host web
HostName 203.0.113.10
User joan
Port 2222
IdentityFile ~/.ssh/id_ed25519
Host nas
HostName 192.168.1.20
User admin
Host *
ServerAliveInterval 60
AddKeysToAgent yes
| Paràmetre | Què fa |
|---|---|
Host | El nom curt (àlies) que escriuràs. Admet comodins: *, *.intern… |
HostName | L’adreça real: IP o nom de domini |
User | Usuari remot |
Port | Port del servidor, si no és el 22 |
IdentityFile | Clau privada que s’ha de fer servir |
IdentitiesOnly yes | Només prova la clau d’IdentityFile (útil si tens moltes claus i el servidor et rebutja per massa intents) |
ProxyJump | Servidor intermedi per on cal passar (equival a ssh -J) |
LocalForward | Túnel local que s’obre en connectar (equival a ssh -L) |
ServerAliveInterval | Envia un senyal cada N segons perquè la connexió no es talli per inactivitat |
AddKeysToAgent yes | Afegeix la clau a l’agent el primer cop que la fas servir, i no t’haurà de tornar a demanar la frase de pas |
L’ordre importa: per a cada paràmetre, ssh es queda amb el primer valor que troba. Per això els blocs concrets van al principi i el bloc general Host * va al final.
Protegeix el fitxer perquè només el puguis llegir tu:
chmod 600 ~/.ssh/config
Pas 4: connecta’t
ssh web
L’àlies funciona també amb totes les eines que fan servir SSH:
scp informe.pdf web:/home/joan/
rsync -av projecte/ web:projecte/
sftp nas
Per comprovar quina configuració s’aplicarà a un àlies, sense connectar-te:
$ ssh -G web | grep -E '^(hostname|user|port|identityfile) '
user joan
hostname 203.0.113.10
port 2222
identityfile ~/.ssh/id_ed25519
L’agent SSH: escriure la frase de pas una sola vegada
Si la clau té frase de pas (i n’hauria de tenir), l’agent SSH la guarda en memòria durant la sessió. Als escriptoris Linux i a macOS, normalment ja n’hi ha un en marxa. Per afegir-hi la clau a mà:
ssh-add ~/.ssh/id_ed25519
ssh-add -l # llista les claus carregades
Si treballes en un servidor sense escriptori i no tens agent, en pots iniciar un per a la sessió actual:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
Amb AddKeysToAgent yes al config, ni tan sols cal fer ssh-add: la clau s’afegeix sola la primera vegada que la fas servir.
Exemples més avançats
Un servidor intern al qual només es pot arribar a través d’un altre:
Host bastio
HostName bastio.example.com
User joan
Host intern
HostName 10.0.0.20
User joan
ProxyJump bastio
Amb ssh intern, ssh primer entra a bastio i des d’allà salta a 10.0.0.20.
Reaprofitar la mateixa connexió per a diverses sessions (la segona s’obre a l’instant, sense tornar a autenticar-se):
Host web
HostName 203.0.113.10
User joan
ControlMaster auto
ControlPath ~/.ssh/cm-%r@%h:%p
ControlPersist 10m
A Windows
Windows 10 i 11 porten el client OpenSSH integrat, i funciona igual que a Linux. Obre PowerShell:
Genera la clau amb ssh-keygen -t ed25519. Es desa a C:\Users\<usuari>\.ssh\id_ed25519.
Copia la clau pública al servidor. Windows no té ssh-copy-id, però ho pots fer amb una línia:
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh joan@203.0.113.10 "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
Crea el fitxer C:\Users\<usuari>\.ssh\config (sense extensió; compte que el Bloc de notes no hi afegeixi .txt) amb el mateix contingut que a Linux. La ruta ~/.ssh/id_ed25519 també funciona a Windows.
Connecta’t amb ssh web.
L’agent a Windows. L’agent d’OpenSSH és un servei de Windows que ve desactivat. Per activar-lo, obre PowerShell com a administrador:
Get-Service ssh-agent | Set-Service -StartupType Automatic
Start-Service ssh-agent
I després, com a usuari normal, ssh-add $env:USERPROFILE\.ssh\id_ed25519.
Algunes guies antigues parlen de Pageant: és l’agent de PuTTY, i només serveix per a PuTTY i les eines que en depenen (WinSCP, per exemple). No té res a veure amb l’ssh de Windows, que fa servir el servei ssh-agent d’OpenSSH. Si fas servir PuTTY, les claus van en format .ppk i els accessos ràpids es desen com a sessions dins del mateix PuTTY.
Compte amb…
- Permisos. Si
~/.ssh/configo les claus privades tenen permisos massa oberts,sshes nega a fer-los servir (Bad owner or permissionsper alconfig,UNPROTECTED PRIVATE KEY FILE!per a les claus). A Linux:chmod 700 ~/.sshichmod 600per alconfigi les claus privades. - Copia la clau pública, mai la privada. Al servidor només hi ha d’anar el fitxer
.pub.