El Secure Shell (SSH) és un protocol de la capa d'aplicació que permet accedir a màquines remotes a través de la xarxa i controlar-les totalment mitjançant l'intèrpret de comandos a més de copiar dades de forma segura.
La seguretat del mètode consisteix en enviar la informació xifrada per tal de que no pugui ser llegida per cap altre usuari i que no es puguin obtenir ni els usuaris ni les contrasenyes.
A qualsevol màquina es pot instal·lar un servidor SSH, però a les Raspberry Pi no és necessari, ja que venen instal·lats i activats per defecte. Per tant, amb aquests dispositius es pot començar a practicar inmediatament.
Amb aquest protocol, el servidor és el que dóna servei per poder ser controlat pel client.
Connectar-se a un servidor SSH
Quan s'estableix la connexió entre client i servidor, el client obté un terminal a la seva pantalla que realitzarà totes les tasques a la màquina servidor, i tots els comandaments de l'intèrpret estudiats anteriorment funcionaran de la mateixa manera que ho farien a la nostra màquina local.
La única cosa que s'ha de tenir clara és qui fa de servidor i qui de client. Una vegada ja es té la IP del servidor, qualsevol client es pot connectar a ell des del terminal amb els comandament:
$ ssh usuari@IP
Com que els usuaris de les Raspberry Pi són tots iguals (pi), el comandament en aquests cas quedaria:
$ ssh pi@10.220.xx.xxx
Inmediatament després, el servidor ens demanarà la contrasenya de l'usuari, que també és la mateixa a totes les màquines (raspberry), i al ficar-la, automàticament quedarem connectats.
El problema de fer feina a una LAN amb SSH utilitzant les IP's és que pot arribar a fer-se complicat trobar la IP de la màquina a la que ens volem connectar i que si tenim un servidor DHCP, aquesta sigui diferent a cada sessió de treball. Per tant, és molt més fàcil fer servir el hostname, que és un nom que li podem posar al PC per tal de substituir la IP dins la nostra LAN.
Per modificar el hostname d'una Raspberry Pi, s'ha d'accedir a la seva configuració amb el comandament:
$ sudo raspi-config
Dins "Advanced Options", torbarem l'opció "hostname". Simplement hem de substituir el que ve per defecte (raspberrypi) per un que ens identifiqui a la LAN. Al meu cas, he utilitzat el hostname "profe", amb el que el comandament per connectar-se a la meva màquina queda:
$ ssh pi@profe.local
L'extensió .local s'haurà d'afegir per accedir a totes les raspberry's de la nostra LAN.
Una vegada realitzada la tasca, des del client bastarà amb escriure el comandament "exit" o tancar el terminal per finalitzar la connexió.
Usuaris connectats
Per conèixer quins usuaris estan connectats al mateix servidor s'utilitza el comandament who (o simplement w), amb el que s'obté una cosa sembblan a lo següent:
pi :0 2016-02-01 15:01 (:0)
pi tty1 2016-02-01 15:01
pi pts/0 2016-02-02 08:42 (10.220.13.137)
pi pts/1 2016-02-02 08:43 (10.220.13.139)
A on la primera columna indica el nom d'usuari a la màquina connectada (totes les Raspberry Pi venen amb l'usuari pi configurat per defecte), la segona columna és un identificador que ens serà útil més endavant, la tercera indica la data i hora de connexió de la màquina i la darrera entre parèntesi ens dóna la IP de les RBP connectades.
Quan el servidor vol expulsar a un client connectat, s'ha de fer servir el comandament:
$ pkill -9 -t pts/1
A on "pts/1" ha de ser l'identificador de l'usuari a expulsar (per tant, el nombre pot variar).
Missatgeria
Missatge per terminal a tots els equips connectats: $ echo "missatge" | wall
Missatge per terminal a un usuari connectat: $ echo "missatge" > /dev/pts/1
Missatge ambb finestra deds del client al servidor: $ zenity --error --text "prueba" --display :0
Per veure totes les possibilitats del comandament zenity (opcions i tipus de missatges) es pot escriure al terminal $ man zenity.
Els missatges enviats amb el comandament echo sempre són de servidor a client i mai sortiran al terminal del servidor.
Copia de fitxers
Aquest procediment es dur a terme mitjançant l'eina "secure copy (SCP)", que també fa servir un sistema xifrat per transferir arxius d'una màquina a una altra. La sintaxi és la següent:
$ scp ruta_i_nom_de_l'arxiu_al_destí pi@IP:ruta_local
Cal notar que aquí també es pot fer servir el hostname, de manera que si es vvol copiar l'arxiu "prova.txt" al directori personal, el comandament queda:
$ scp prova.txt pi@profe.local:/home/pi
Exercicis:
Connectat per ssh amb la Raspberry Pi amb el hostname "INFA".
Crea dins l'escriptori (Desktop) una carpeta amb el teu nom i primer llinatge (alerta amb els espais!).
Crea dins d'aquesta carpeta un fitxer anomenat "opinio.txt" a on expliquis en una línia la teva opinió sobre aquest punt del temari.
Descarrega al teu ordinador una imatge lleugera del que vulguis i fes una còpia amb scp dins la teva carpeta en "INFA".
Fes servir zenity per enviar un missatge a "profe" amb el teu nom i avisant de que ja has acabat.
Tanca la connexió amb exit.