SSH (Secure shell)

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

Fitxers de configuració servidor

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').

Accés remot a màquines

El mecanisme utilitzat al connectar-se a una màquina remota varia segons el mètode empleat i la versió del protocol SSH.

Versió 1 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.

Versió 2 del protocol SSH

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.

Generació de claus. ssh-keygen

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.

Exemple de generació de claus

La màquina A és la nostra. La màquina B és el servidor.

  • Executem en l'usuari que ens connectarem remotament (màquina A) la comanda:
ssh-keygen -t dsa

L'opció -t especifica el tipus, en aquest cas dsa.

  • Copiem la clau pública que ens ha creat:
vi .ssh/id_dsa.pub
  • Ens conectem al servidor (màquina B). Editarem el fitxer del usuari que ens connectarem via ssh i enganxem el contingut de 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

Fitxers de configuració del client

També a la carpeta '$HOME/.ssh' trobem els fitxers de configuració del client:

Fitxer config

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.

Fitxer known_hosts

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.

scp

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.

sshfs

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.

Denegar accés ssh a certs usuaris

sudo  vi /etc/ssh/sshd_config

Afegir la línies:

DenyUsers user1 user2 user3

Reiniciem el servei

sudo /etc/init.d/ssh restart

Sudoers

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
  1. Primer ALL: Esta conectat des de qualsevol server: resteve ALL=(postgres) ALL
  2. Segon ALL: Poder canviar a un altre usuari: resteve 172.20.0.0/16=(postgres) ALL
  3. Tercer ALL: Qualsevol comanda: resteve 172.20.0.0/16=(postgres) /ruta/script
 
servers/ssh.txt · Darrera modificació: 2012/01/19 17:36 per jmartin
 
Copyright: Zikzakmedia Llicència Creative Commons By-NC-SA
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki