SSH és l'evolució de l'antic rsh (remote shell) afegint encriptació de dades en la comunicació entre màquines. SSH permet, entre d'altres coses, copiar de fitxers, execució de comandes remotes, connectar-se a màquines remotes, etc. OpenSSH té l'aplicació client i el servidor i totes dues s'instal·len utilitzen un mateix paquet (ssh).
Existeixen múltiples implementacions d'SSH. La més famosa en els entorns linux és OpenSSH però també existeixen versions de pagament com les implementacions de la empresa SSH.com. En principi haurien de ser implementacions anàlogues però existeixen algunes petites diferencies. En aquest documents ens centrarem en OpenSSH.
En principi un client de OpenSSH es connecta perfectament a un servidor SSH comercial i viceversa. Tot i així, existeixen algunes diferencies en el protocol ftp que impedeixen utilitzar algunes eines basades en ssh com, per exemple, rsync.
Instal·lar el daemon SSH:
$ apt-get install ssh
El servidor SSH l'executa el dimoni sshd. Com la resta de serveis en Linux l'script de configuració del dimoni és:
/etc/init.d/sshd
La carpeta /etc/ssh conté els fitxers de configuració del daemon sshd. El fitxer de configuració principal és sshd_config . En aquest fitxers és configuren entre d'altres el port del servei, les claus d'identificació del servidor, si admet o no X11Forwarding, la versió de protocol SHH, etc. Es pot obtenir més informació sobre aquest fitxer al manual ('$ man sshd_config').
El mecanisme utilitzat al connectar-se a una màquina remota varia segons el mètode empleat i la versió del protocol SSH.
#Mitjantçant l'ús dels fitxers '/etc/hosts.equiv' o '/etc/ssh/shosts.equiv' de la màquina remota a la que és connectem.
#Igual que l'anterior però a nivell d'usuari, es a dir, mitjantçant els fitxers '$HOME/.ssh/rhosts' i '$HOME/.ssh/shosts'
#Utilitzant autentificació basada en RSA. RSA es basa en criptografia de clau pública. El fitxer '$HOME/.ssh/authorized_keys' del servidor remot al que ens connectem, ha de contenir la clau pública del parell de claus que utilitzem per a connectar-nos. En resum, el procés de connexió és el següent:
#El client envia una petició de connexió al servidor juntament amb la clau pública. #El servidor comprova si la clau existeix al fitxer $HOME/.ssh/authorized_keys. Si no es així és continua amb el procés normal (mitjançant password). #Si el servidor identifica la clau pública com a vàlida, envia un “repte” al client. Aquest repte consisteix normalment en un número aleatori encriptat mitjançant la clau pública del usuari. #El client ha de ser capaç de desencriptar mitjançant la clau privada el número aleatori. D'aquesta forma el servidor autentifica al usuari que es connecta.
La versió 2 del protocol SSH inclou millores en seguretat, afegint mecanismes addicionals de seguretat (AES,·DES,BLOWFISH,CAST128, etc) i de control de la integritat de la transmissió (hmac-md5,hrac-sha1).
Pel que fa al mecanisme de connexió, s'afegeix la possibilitat de connectar-se utilitzant DSA (Digital Signature Algorithm) o RSA.
La comanda ssh-keygen s'encarrega de la creació dels parells de claus pública/privada. Per defecte, els fitxers creats són:
#$HOME/.ssh/id_dsa (clau privada) i $HOME/.ssh/id_dsa.pub (clau pública) si el protocol escollit es DSA. #$HOME/.ssh/id_rsa (clau privada) i $HOME/.ssh/id_rsa.pub (clau pública) si el protocol escollit es RSA.
Les comanda exacta a utilitzar és per a cada cas:
# ssh-keygen -t dsa # ssh-keygen -t rsa
El nom dels fitxers per defecte es pot canviar utilitzant el paràmetre -f. Durant la creació de la clau sens preguntarà per la possibilitat de protegir l'ús de la clau amb password. Si la nostra intenció és automatitzar tasques podem anular aquest pas introduint directament intro.
La màquina A és la nostra. La màquina B és el servidor.
ssh-keygen -t dsa
L'opció -t especifica el tipus, en aquest cas dsa.
vi .ssh/id_dsa.pub
vi .ssh/authorized_keys
ATENCIÓ als permisos dels directoris:
chmod 755 /home/usuari chmod 700 .ssh chmod 600 .ssh/authorized_keys
Una altre forma de fer-ho és executar la següent comanda des del servidor local cap al servidor remot:
ssh-copy-id -i ~/.ssh/id_rsa.pub usuario@ip_server
o
ssh-copy-id -i ~/.ssh/id_dsa.pub usuario@ip_server
També a la carpeta '$HOME/.ssh' trobem els fitxers de configuració del client:
En aquest fitxer és configuren els perfils d'SSH. Un perfil és una configuració especifica per a connectar-se a un servidor o grup de servidors específics. Per exemple:
Host portatil Hostname portatil.edu IdentityFile ~/.ssh/portatil Port 22
Ens indica que quan utilitzem el perfil portatil, ens connectem a la màquina portatil.edu, mitjançant la clau privada '~/.ssh/portatil'.
Mentre que:
Host * ForwardX11 yes
Configura el client perquè utilitzi X11Forwarding en tots els perfils.
Aquest fitxer emmagatzema les claus públiques dels servidors als que ens connectem habitualment. Això es fa per tal d'introduir un mecanisme addicional de seguretat que ens permet identificar atacs del tipus “man in the middle”, on els servidor es substituït per un altra màquina intrusa.
Aquesta comanda permet la copia remota de fitxers. Funciona de forma anàloga a la comanda cp, però s'utilitza (de la mateixa forma que veurem més endavant amb rsync) prefixos de connexió a màquina remota:
* usuari@host:/PATH_AL_FITXER
Per exemple:
scp $HOME/file1 usuari@domini.com:$HOME
Copia el fitxer file1 de la carpeta home local a la carpeta home del servidor sga2.upc.es.
Muntatge de disc remots mitjançant ssh.
Instal·lació i configuració inicial:
sudo apt-get install sshfs sudo addgroup <nom_usuari> fuse sudo modprobe fuse
Pq el mòdul fuse es carregui automàticament a l'arrancar:
sudo vi /etc/modules
i afegir al final una línia amb la paraula fuse
Podem provar si funciona amb:
sshfs usuari_remot@servidor_remot:cami_remot punt_muntatge -C -o workaround=rename
Perquè es munti automàticament cal afegir aquesta línia a /etc/fstab:
sudo vi /etc/fstab
sshfs#usuari_remot@servidor_remot:cami_remot punt_muntatge fuse user,auto 0 0
Cal generar un parell de claus pública/privada i enviar la pública al servidor com s'explica en un apartat anterior.
sudo vi /etc/ssh/sshd_config
Afegir la línies:
DenyUsers user1 user2 user3
Reiniciem el servei
sudo /etc/init.d/ssh restart
Per que al fer sudo no ens demani la contrasenya ho afegirem al final del fitxer (important)
sudo visudo
Al final del fitxer afegim:
resteve ALL=(ALL) NOPASSWD:ALL