La comanda ssh

Accés ràpid a servidors SSH amb ~/.ssh/config a Linux i Windows



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àmetreQuè fa
HostEl nom curt (àlies) que escriuràs. Admet comodins: *, *.intern…
HostNameL’adreça real: IP o nom de domini
UserUsuari remot
PortPort del servidor, si no és el 22
IdentityFileClau privada que s’ha de fer servir
IdentitiesOnly yesNomés prova la clau d’IdentityFile (útil si tens moltes claus i el servidor et rebutja per massa intents)
ProxyJumpServidor intermedi per on cal passar (equival a ssh -J)
LocalForwardTúnel local que s’obre en connectar (equival a ssh -L)
ServerAliveIntervalEnvia un senyal cada N segons perquè la connexió no es talli per inactivitat
AddKeysToAgent yesAfegeix 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/config o les claus privades tenen permisos massa oberts, ssh es nega a fer-los servir (Bad owner or permissions per al config, UNPROTECTED PRIVATE KEY FILE! per a les claus). A Linux: chmod 700 ~/.ssh i chmod 600 per al config i les claus privades.
  • Copia la clau pública, mai la privada. Al servidor només hi ha d’anar el fitxer .pub.

Articles relacionats