Secure Shell (SSH)
SSH és un protocol per accedir a mà quines remotes i a altres serveis de xarxa de manera segura. Gairebé tots els sistemes operatius inclouen clients del protocol basats en la implementació OpenSSH com ara Linux, macOS i Windows 10.
Continguts
OpenSSH
La suite OpenSSH inclou, entre d’altres, els següents programes:
ssh |
Per accedir a mà quines remotes i executar-hi programes, i molt més. |
scp |
Per copiar fitxers entre mà quines remotes. |
ssh-keygen |
Per generar claus d’autenticació. |
ssh-copy-id 1 |
Per copiar claus entre mà quines. |
ssh-agent |
Per gestionar l’autenticació amb clau. |
ssh-add |
Per afegir claus a l’agent d’autenticació. |
Connexió remota: ssh
Serveix per a la connexió i execució de programes en mà quines remotes:
ssh [-X] [user@]host [commmand]
Cal indicar-hi el nom de la mà quina (host) i, si no coincideix amb el nostre nom local, el nom de l’usuari remot (user). Si en comptes de obrir una shell remota, volem executar només una comanda (command), també l’hi hem d’indicar.
L’opció -X
permet executar aplicacions grà fiques reenviant
la connexió al servidor X de la nostra mà quina local.
Exemple
me@home:~ $ ssh user@login3.lsi.upc.edu
Password:
Last login: Sat Mar 13 11:50:29 2021 from 147.83.29.5
Benvingut al Laboratori de Calcul de LSI: login3
user@login3:~ $ /usr/local/bin/passwd
Identity validation...
Enter your UNIX password:
Changing UNIX and samba passwords for user
New password:
Retype new password:
passwd: password updated successfully
user@login3:~ $ logout
Connection to login3 closed.
me@home:~ $ ssh localhost "ddate ; ls -ld .ssh/"
Today is Setting Orange, the 73rd day of The Aftermath in the YOLD 3185
drwx------ 2 user user 4096 Mar 13 13:10 .ssh/
me@home:~ $
Còpia remota: scp
Serveix per a la còpia de fitxers entre mà quines remotes.
Per copiar un fitxer a una mà quina remota:
scp [-r] source [user@]host:[path]
Per copiar un fitxer d’una mà quina remota:
scp [-r] [user@]host:path target
Tant l’origen (source) com el destà (target) poden ser fitxers o directoris, i poden ser locals o remots. Han d’indicar, si cal, l’usuari (user), la mà quina (host), i la ruta (path) al fitxer o directori.
L’opció -r
permet copiar directoris recursivament, però compte:
els symbolic links es resolen i es copien també de manera recursiva.
Exemple
me@home:~ $ scp CrypTEC99.pdf user@login3.lsi.upc.edu:public_html/papers
CrypTEC99.pdf 100% 905KB 7.5MB/s 00:00
me@home:~ $ ssh user@login3.lsi.upc.edu ls -l public_html/papers/Cry\*
-rw-r--r-- 1 me me 926771 Mar 13 13:45 CrypTEC99.pdf
me@home:~ $
Autenticació amb clau
La manera més segura de fer servir ssh i scp és fent servir criptografia asimètrica o de clau pública.
La criptografia de clau pública es basa en un parell de claus: una clau privada i una clau pública. La clau privada ens identifica i la clau pública ens reconeix.
Cada cop que ens connectem a un servidor remot, ens hem d’identificar. Si fem servir un password, aquest s’envia cada cop al servidor. Per evitar-ho, hem d’identificar-nos amb una clau. D’aquesta manera, el nostre password mai no s’envia per la xarxa.
Fer servir claus també evita haver d’escriure el nostre password cada cop que volem fer una connexió, com veurem més endavant.
Generació de claus: ssh-keygen
Per generar el parell de claus, pública i privada, hem de fer servir el programa ssh-keygen.
Per defecte, ssh-keygen genera un parell de claus RSA, i guarda
la clau privada al fitxer id_rsa
i pública a id_rsa.pub
:
ssh-keygen
Perill
El ssh-keygen ens demanarà que indiquem una passphrase per protegir la nostra clau privada. Serveix per xifrar la clau de manera que per fer-la servir és necessari indicar-la.
És molt important que fem servir una passphrase prou segura. Per escollir-ne una, podeu consultar Contrasenyes.
Per poder-nos identificar a un servidor remot amb la clau, cal
que el servidor ens reconegui. Per fer-ho, cal que hi copiem
la clau pública al fitxer ~/.ssh/authorized_keys
:
ssh-copy-id -i ~/.ssh/id_rsa user@host
Nota
Si el vostre sistema no inclou ssh-copy-id, podeu descarregar-lo o copiar la clau manualment, com s’explica més endavant.
Ara ja podem accedir al servidor amb clau, sense password. Per fer-ho, cal indicar la clau que volem fer servir:
ssh -i ~/.ssh/id_rsa user@host
Però hi ha una manera més senzilla i segura de fer servir la clau privada, com veurem tot seguit.
Agent d’autenticació: ssh-agent i ssh-add
El programa ssh-agent pot gestionar l’autenticació amb clau per nosaltres. Per començar a fer-lo servir, només cal executar:
eval `ssh-agent`
Nota
Si treballem amb una distribució Linux, normalment ja hi ha un agent executant-se i ens podem saltar aquest pas.
Quan hi afegim una clau amb ssh-add, se’ns demana la passphrase i l’agent emmagatzema la clau:
ssh-add ~/.ssh/id_rsa
Ara ja podem accedir als servidors que reconeguin aquesta clau tants cops com sigui necessari sense haver de tornar a indicar el nostre password o la nostra passphrase.
Gestió de claus
Si algú té accés a una de les nostres claus privades i pot obtenir la nostra passphrase, podrà accedir als servidors que ens reconeguin amb la nostra identitat. Per això és molt important seguir algunes regles:
Les claus privades no han de sortir mai de la mà quina on s’han creat. Si ens cal accedir a un servidor des de diferents mà quines, hem de crear diferents claus. AixÃ, en cas que alguna de les mà quines sigui compromesa, només caldrà eliminar una de les nostres claus públiques del servidor.
Les claus privades sempre han d’estar protegides per una bona passphrase. D’aquesta manera, si algú té accés a un dels fitxers de clau privada, serà molt difÃcil que tingui accés a la clau.
Idealment, cada clau ha de donar accés a un únic usuari en un únic servidor. Aixà minimitzem les possibles conseqüències d’una clau compromesa.
En cas que gestionem un nombre de claus molt gran, hi ha un compromÃs evident entre la facilitat d’ús i la seguretat, com sempre. Però per simplificar-ne l’ús, podem configurar el SSH com veurem tot seguit.
Configuració: ~/.ssh/config
Per facilitar-nos l’ús del SSH podem configurar els clients. Al fitxer
config
hi podem indicar: à lies per servidors, noms d’usuari per
connexió, mètodes d’autenticació…
Per exemple:
# defaults
Match all
PreferredAuthentications publickey,password
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yes
AddKeysToAgent yes
Host *.lsi.upc.edu
User barbara
IdentityFile ~/.ssh/id_lsi
Host liskov
HostName liskov.lsi.upc.edu
ForwardX11 yes
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_liskov
Host docs
HostName docs.upc.edu
User git
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_barbara.liskov@upc.edu
Algunes explicacions:
|
Configuració que s’aplica a tots els casos |
|
Servidor(s) concrets, o à lies de servidors |
|
Nom complet o adreça del servidor o à lies |
|
Nom d’usuari al servidor |
|
Tipus d’autenticació que volem fer servir |
|
Clau privada que fem servir |
|
El primer cop que fem servir una clau, s’afegirà a l’agent |
|
No volem que l’agent tracti de buscar la clau correcta (haurem d’indicar una clau per a cada cas a la configuració o comanda) |
|
Redirigim els clients grà fics al nostre servidor X11 local. |
Quan executem ssh liskov
s’apliquen les següents configuracions:
Match all
IdentitiesOnly yes
AddKeysToAgent yes
Host *.lsi.upc.edu
User barbara
Host liskov
HostName liskov.lsi.upc.edu
ForwardX11 yes
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_liskov
És a dir, ssh liskov
és equivalent a (si fem servir l’agent):
ssh-add ~/.ssh/id_liskov
ssh -X barbara@liskov.lsi.upc.edu
Autorització: ~/.ssh/authorized_keys
El format del fitxer ~/.ssh/authorized_keys
és molt senzill:
[options] keytype base64-encoded-key comment
És molt semblant al format del fitxer de clau pública:
keytype base64-encoded-key comment
El comentari que fa servir ssh-keygen per defecte és
user@host
i ens serveix per conèixer l’origen de la clau.
Podem indicar-ne un altre amb l’opció -C
o simplement
editant manualment el fitxer.
El fitxer ~/.ssh/authorized_keys
, a més, pot contenir lÃnies
en blanc o de comentari, si comencen amb el carà cter #
.
Aquests comentaris, i les opcions, s’introdueixen manualment.
Un exemple:
# per apagar la mà quina localment command="sudo /sbin/poweroff",from="::1" ssh-ed25519 AAAAC3NzaC1lZDI1NTE 5AAAAIN+HqSfHgK6NMuzK7KlXFfUR3V4ZM78jReqWnR7OZkFZ barbara@liskov # només des de les mà quines del domini from="*.lsi.upc.edu,!147.83.29.128/25" ecdsa-sha2-nistp256a AAAAE2VjZHNh LXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBPlwDTBFUbq23h0DF5MYlJYnWgCaQ2fO l4/d64TI/VX0mXxx+mWUVqj3qJ3p4XGVcCtJ8OGJP3jwSarNDnKwkL8= barbara@liskov ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDDAw15mvA45lt8s86wj7S01/AFMNvmuHmB vRiFZWg55Ncxfq67HQK0TC2LK3BScjNuk43h5o73EPYl0EJw3wS2rzBrrd8Tl8NvbWB5TRxB l4IgWDYK7inlmgIovT/2rxs+UM89hkwM4Pn7pQbN3bolAmVvAka1immOzyKCXoeS8XXcKrz8 72g+ajCAyv5Qi0WOAaP0acuVdF7ulVSMNrfgjsqZe6SlSOwX6FHMyHulYzSXzRGTbB6wcNkU cYzNQ6VSJ7rZVUMzVFzamXVOx3W0RaUtVO5XGYSW0qVSdu2ZmZIXuwNrJJyWWpdg1sMzkRtJ YfbGu1027fiv5qO+FSwn me@home
Còpia de claus: ssh-copy-id o manual
Com hem vist, l’script ssh-copy-id copia claus públiques a mà quines remotes per nosaltres. Però aquest script no està disponible a tots els sistemes. Concretament, no hi és a Windows 10 ni a macOS o BSD antics.
En aquests casos el podeu descarregar, o bé podeu copiar les claus
i manegar manualment el fitxer ~/.ssh/authorized_keys
.
Descarregar l’script
Podeu descarregar l’script del repositori de la versió portable d’OpenSSH 2 o d’aquÃ, però per poder-lo executar necessitareu una shell compatible amb POSIX. A Windows us caldrà fer servir Cygwin o WSL, per exemple.
- Versió: OpenSSH 8.5p1 (2021-03-03)
ssh-copy-id
(script)ssh-copy-id.1
(manual)
Còpia manual de claus
Si preferiu gestionar les claus manualment, o no voleu descarregar l’script o instal·lar software addicional, cal tenir cura dels permisos:
Si cal, creem el parell de claus:
me@home:~ $ ssh-keygen -a 100 -b 4096 -t rsa -f ~/.ssh/id_rsa_4
Si mai no hem fet servir SSH a la mà quina remota, cal que hi creem el fitxer
~/.ssh/authorized_keys
amb els permisos correctes:me@home:~ $ ssh user@login3.lsi.upc.edu Password: user@login3:~ $ umask 77 user@login3:~ $ mkdir $HOME/.ssh user@login3:~ $ touch $HOME/.ssh/authorized_keys user@login3:~ $ ls -ld $HOME/.ssh $HOME/.ssh/authorized_keys drwx------ 2 user user 4096 Mar 13 13:10 /home/user/.ssh -rw------- 1 user user 0 Mar 13 14:03 /home/user/.ssh/authorized_keys
Podem editar el fitxer, i copiar i enganxar la clau, o bé podem afegir-la des de la nostra mà quina:
user@login3:~ $ logout me@home $ cat $HOME/.ssh/id_rsa_4.pub | > ssh user@login3.lsi.upc.edu 'cat >> $HOME/.ssh/authorized_keys' Password:
Finalment, comprovem que ha funcionat:
me@home:~ $ ssh -i ~/.ssh/id_rsa_4 user@login3.lsi.upc.edu uname -srmp SunOS 5.10 sun4u sparc
Opcionalment, podem configurar la connexió per simplificar-ne l’ús:
me@home:~ $ cat ~/.ssh/config ... Host login3 HostName login3.lsi.upc.edu User user PreferredAuthentications publickey IdentityFile ~/.ssh/id_rsa_4 IdentitiesOnly yes AddKeysToAgent yes
Windows: OpenSSH
A Windows 10 tenim accés a la suite OpenSSH. Els programes ssh, scp i ssh-keygen funcionen sense cap configuració addicional.
Per poder fer servir ssh-add i ssh-agent cal configurar l’OpenSSH Authentication Agent. 3
Si fem servir altres versions de Windows, o volem poder fer servir un terminal amb moltes més funcionalitats, podem fer servir PuTTY.
Windows: PuTTY
PuTTY és un emulador de terminal amb suport per al protocol SSH, entre d’altres. Inclou un conjunt d’eines similar a les d’OpenSSH i és molt configurable.
Els equivalents proximats de PuTTY als programes d’OpenSSH que hem vist són:
OpenSSH |
PuTTY |
---|---|
ssh |
PuTTY (putty.exe) |
ssh-keygen |
PuTTYgen (puttygen.exe) |
ssh-agent |
Pageant (pageant.exe) |
scp |
pscp.exe (CLI) |
sftp |
psftp.exe (CLI) |
PuTTY guarda les claus pública i privada en un únic fitxer. Pageant carrega la clau privada simplement clicant al fitxer. PuTTYgen permet generar les claus o extreure’n la clau pública.
A més de l’instal·lador, si només en volem fer-ne un ús puntual, podem descarregar només el programa putty.exe i executar-lo directament.
Descà rregues: https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html
Documentació: https://www.chiark.greenend.org.uk/~sgtatham/putty/docs.html
OpenSSH: manuals
Aquà teniu un recull de les pà gines de manual dels programes que hem vist:
Notes al peu
- 1
El programa ssh-copy-id forma part de la distribució portable d’OpenSSH.
- 2
https://anongit.mindrot.org/openssh.git/plain/contrib/ssh-copy-id
- 3