La comanda ssh (Secure Shell) és el client que fas servir per connectar-te a un altre equip i treballar-hi com si hi fossis davant, a través d’una connexió xifrada. També serveix per executar comandes remotes, fer túnels i saltar d’un servidor a un altre. És l’eina bàsica de qualsevol persona que administri servidors Linux.
Sintaxi
ssh [opcions] [usuari@]servidor [comanda]
usuari: el compte a la màquina remota. Si no el poses,sshfa servir el mateix nom d’usuari que tens en local.servidor: una adreça IP, un nom de domini o un àlies definit a~/.ssh/config.comanda: si la poses, s’executa al servidor i la connexió es tanca quan acaba. Si no, obres una sessió interactiva.
Opcions més útils
| Opció | Què fa |
|---|---|
-p port | Port del servidor (per defecte, 22) |
-i fitxer | Clau privada que vols fer servir |
-l usuari | Usuari remot (alternativa a usuari@) |
-J salt | Connecta passant per un servidor intermedi (jump host) |
-L port:destí:port | Túnel local: un port del teu equip porta a un destí vist des del servidor |
-R port:destí:port | Túnel remot: un port del servidor porta a un destí vist des del teu equip |
-D port | Proxy SOCKS local: el trànsit surt a Internet des del servidor |
-N | No executa cap comanda (només per a túnels) |
-f | Passa a segon pla després d’autenticar-se |
-t | Força un terminal (pseudo-tty) per a comandes interactives (sudo, top, vim…) |
-v, -vv, -vvv | Mode detallat, per diagnosticar problemes de connexió o d’autenticació |
-C | Comprimeix les dades (només ajuda en connexions lentes) |
-X | Reenvia les finestres gràfiques (X11) |
-A | Reenvia l’agent de claus (amb precaució, vegeu més avall) |
-o opció=valor | Qualsevol opció de configuració, com les de ~/.ssh/config |
-G | Mostra la configuració que s’aplicaria a un servidor, sense connectar-s’hi |
Exemples
Connexió bàsica:
ssh joan@192.168.1.50
A un port diferent del 22, amb una clau concreta:
ssh -p 2222 -i ~/.ssh/id_ed25519 joan@servidor.example.com
Executar una comanda i tornar:
ssh joan@192.168.1.50 'uptime'
Una comanda que necessita un terminal (per exemple, perquè sudo et demani la contrasenya):
ssh -t joan@192.168.1.50 'sudo apt update'
Saltar a un servidor intern a través d’un servidor accessible des de fora:
ssh -J joan@bastio.example.com joan@10.0.0.20
Accedir a una base de dades MariaDB/MySQL que només escolta a localhost del servidor, a través d’un túnel (connectaràs al port 3307 del teu equip):
ssh -N -L 3307:127.0.0.1:3306 joan@servidor.example.com
Copiar un directori comprimit d’un servidor a l’altre sense fitxers intermedis:
tar -czf - projecte/ | ssh joan@192.168.1.50 'tar -xzf - -C /home/joan/'
Veure per què no funciona una connexió:
ssh -v joan@192.168.1.50
Seqüències d’escapament
Si una sessió es queda penjada (per exemple, perquè s’ha tallat la xarxa), no cal tancar el terminal. Prem Retorn, després ~ i després .: ssh es tanca immediatament. Altres seqüències útils:
| Seqüència | Què fa |
|---|---|
~. | Tanca la connexió |
~# | Llista les connexions reenviades |
~C | Obre una línia de comandes per afegir túnels en calent |
~? | Mostra totes les seqüències |
La primera connexió i known_hosts
La primera vegada que et connectes a un servidor, ssh et mostra l’empremta de la seva clau i et pregunta si la vols acceptar. Si respons yes, la desa a ~/.ssh/known_hosts. Si més endavant la clau canvia, veuràs un avís gros (REMOTE HOST IDENTIFICATION HAS CHANGED) i ssh no et deixarà connectar. Pot ser que hagis reinstal·lat el servidor, o que algú s’estigui fent passar per ell. Si saps que és el primer cas, esborra la clau antiga amb:
ssh-keygen -R 192.168.1.50
Compte amb…
-A(reenviament de l’agent). Qualsevol amb permisos de root al servidor pot fer servir el teu agent mentre estiguis connectat, i entrar amb les teves claus a altres servidors. Si només el necessites per saltar a una altra màquina, fes servir-J, que no té aquest risc.-Xté un risc semblant amb la teva sessió gràfica. Fes-lo servir només en servidors de confiança.- Contrasenyes a l’historial. No posis mai contrasenyes a la línia de comandes. Fes servir claus.