Superkompjuter u VirtualBox-u – deo I

U serijalu članaka „Superkompjuter u VirtualBox-u“ pisaćemo o procesu instaliranja klastera na VirtualBox-u. U prvom delu definisaćemo početne korake potrebne za instalaciju klastera. Opisaćemo instaliranje CentOS-a i podešavanje virtuelnih mašina, kao i konfiguraciju mreže, NFS-a i ssh passwordless autentifikacije. U drugom delu, prethodno definisan skup računara prilagodićemo za izvršenje paralelnih poslova instaliranjem Torque/PBS menadžera resursa. Biće reči o tome kako da instaliramo Torque, MAUI i OpenMPI. U trećem delu biće opisan proces istaliranja alternativnog menadžera resursa SLURM.

Klaster računari predstavljaju važan deo u razvoju računarske nauke. Brzina kao i preciznost izračunavanja samog programa drastično se povećavaju koristeći resurse klastera u potpunosti za sasvim prihvaljiv odnos cena-performanse. HPC Klaster se sastoji od jednog računara koji predstavlja glavni čvor i nekoliko računara koji su zaduženi za izračunavanja i predstavljaju Compute čvorove, broj ovakvih mašina može varirati u zavisnosti od potrebe korisnika. Glavni čvor dobija instrukcije, prosleđuje ih dalje preko lokalne mreže, a onda ostali čvorovi sistema, komunicirajući međusobno, dosta brže dolaze do rešenje. Postoje dva načina za kreiranje klastera, jedan, dosta lakši jeste koristeći se softverom koji će u određenoj meri to obaviti umesto vas. Primer takvog softvera jeste ROCKS. Ovakav način iako na prvi pogled lakši ima dosta mana. Drugi način, na koji ćemo se mi fokusirati, jeste kreiranje klastera od samog početka. Instaliranje svih neophodnih komponenti, konfigurisanje ssh protokola, nfs-a, kao i odgovarajućeg batching sistema. U nastavku prikazaćemo postupak kreiranja HPC klastera sačinjenog od tri računara. Jedan računar će biti glavni čvor, dok će ostali obavljati zadatke koje im on prosledi. Za potrebe jednog ovakvog klastera koristićemo operativni sistem CentOS 7.

Instalacija CentOS-a na VirtualBox-u

U daljem tekstu dato je detaljno upustvo za kreiranje virtuelnih mašina korišćenjem VirtualBox-a, kao i instalacije CentOS-a na kreiranim virtuelnim mašinama.

Instalacija VirtualBox-a

1) Otvorite Windows Features i proverite da li je opcija Hyper-V isključena

2) Restartujte računar, uđite u BIOS, pronađite opcije Intel VT-d i Intel Virtualization Technology i omogućite ih. Sačuvajte svoja podešavanja i isključite, zatim uključite računar. Ukoliko na Vašem računaru ne postoje ove opcije, nije moguće instalirati CentOS x64. Kako biste instalirali VirtualBox, preuzmite aplikaciju sa linka http://www.virtualbox.org/, odaberite odgovarajući, u zavisnosti od operativnog sistema koji koristite. Samo ispratite instalaciju po koracima.

3) Pokrenite VirtualBox, otvoriće se prozor koji izgleda ovako.

4) Kreirajte novu virtuelnu mašinu klikom na opciju New u toolbar-u ili kombinacijom tastera Ctrl + N. Unesite ime Vaše virtuelne mašine, za tip izaberite Linux i verziju Other Linux (64-bit)

Podesite veličinu memorije na 1024MB.

5) Sledeći korak je podešavanje hard diska, potrebno je izabrati opciju create a virtual hard drive now, zatim odabrati VDI (VirtualBox Disk Image), i izabrati Dynamically allocated za opciju Storage on physical hard drive. Kod podešavanja opcije File location and size, ostavite podrazumevano ime i unesite veličinu virtuelnog hard diska.

Ukoliko ste ispratili sve korake, uspešno ste kreirali virtuelnu mašinu.

Podešavanje virtuelne mašine

1) PAE Settings – Da bismo uspešno instalirali CentOS, najpre je potrebno proveriti da li je opcija PAE/NX omogućena. Otvorite podešavanja, klikom na ikonicu Settings u toolbar-u i u meniju sa leve strane izaberite opciju System i potom otvorite tab Processor, ukoliko Extended Features: Enable PAE/NX nije čekirano, čekirajte.

2) Isključivanje nepotrebnog hardvera – Kako bi sama mašina radila brže, poželjno je isključiti nepotreban hardver. Otvorite podešavanja, u meniju sa leve strane, možete naći Audio i USB koje treba onemogućiti.

3) Mrežna podešavanja – Otvorite podešavanja, u meniju sa leve strane izaberite opciju Network, proverite da li je čekirana opcija Enable Network Adapter i da li je Attached to podešeno na NAT. Zatim otvorite tab Adapter 1, kliknite na Advanced,a zatim na PortForwording dugme. Dodajte novo pravilo po uzoru na ovo sa priložene slike.

Pošto mašina koju trenutno pravimo predstavlja Head node našeg klastera, osim što mora imati izlaz na mrežu, što smo upravo podesili, mora biti i u nekoj lokalnoj mreži sa ostalim računarima našeg klastera. Zbog toga joj moramo dodati još jedan mrežni adapter.

4) Odaberite sada tab Adapter 2, čekirajte opciju Enable Network Adapter. Zatim u opciji Attached To podesiti Internal network. Nakon toga biće vam omogućeno da izaberete naziv lokalne mreže, mi ćemo odlučiti da mreža sačuva svoj predefinisani naziv, „itnet“. Klikom na dugme OK sačuvajte svoja podešavanja.

Instalacija CentOS-a

1) Preuzimanje ISO fajla – Za instaliranje CentOS-a na kreiranoj virtuelnoj mašini Najpre je potrebno preuzeti CentOS ISO fajl sa linka https://www.centos.org/download/, mi smo se odlučili za minimal ISO i preuzeli ga sa linka http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-1611.iso

2) Podešavanja Nakon preuzimanja fajla – Otvorite podešavanja i izaberite opciju System u meniju sa leve strane. Izmenite svoja podešavanja da se poklapaju sa podešavanjima na priloženoj slici.

3) Zatim izaberite opciju Storage, kliknite na liniju na kojoj piše Empty, i zatim kliknite na dugme za biranje ISO fajla i unesite putanju do prezetog ISO fajla. Klikom na dugme OK sačuvajte svoja podešavanja. Sada možemo startovati kreiranu virtuelnu mašinu, klikom na dugme Start ili desnim klikom miša i odabirom opcije Start. Nakon pokretanja pojavljuje se ekran za instalaciju, potrebno je započeti instalaciju i kasnije podesiti šifru za root nalog.

4) Podešavanje mreže – Postojeće konekcije možete izlistati pozivanjem komande nmcli d i videti da li su one aktivne ili ne. b. Unesite komandu nmtui, nakon čega će se prikazati grafički interfejs pomoću kog možete upravljati svojim konekcijama. Kako biste imali pristup internetu, potrebno je da aktivirate željenu konekciju, pošto takva ne postoji po instalaciji.

5) Instalacija korisničkog interfejsa – Radi lakšeg korišćenja CentOS-a možete dodati korisnički interfejs pozivanjem komande yum -y groups install “GNOME Desktop”

6) Na ovaj način instalirali smo i podesili virtuelnu mašinu koja će predstavljati Head node HPC klastera koji želimo da napravimo. Ponovićemo pomenuti postupak još dva puta kako bi smo kreirali mašine koja će predstavljati compute nodove istog klastera, uz jednu bitnu razliku. Prilikom podešavanja mreže, u opciji Network, postavićemo samo jedan mrežni adapter, za razliku od Head node-a. Taj mrežni adapter će biti za Internal network, i takođe ćemo mu ostaviti predefinisani naziv „itnet“. Dalji postupak instalacije biće istovetan kao i postupak instalacije prve virtuelne mašine.

Podešavanje mreže i maskarada

Ono što ćemo uraditi pre nego što nastavimo bilo šta jeste da podesimo satove na sva tri računara, pokretanjem određenih komandi na svim računarima obezbedićemo sinhronizovanost satova na svim node-ovima.

yum install ntp -y
chkconfig ntpd on
ntpdate pool.ntp.org
systemctl start ntpd

Nakon prethodnog koraka računari su povezani u internu mrežu „itnet“, pozivom komande nmcli d na svakom od računara, izlistaćemo sve mreže na koje je računar povezan. Vidimo da dva compute Node-a imaju samo jednu mrežu obično sa predefinisanim nazivom enp0s3, ovo upravo predstavlja internu mrežu u kojoj se nalaze samo ova tri računara. Kada pozovemo ovu komandu za Head Node računar, vidimo da on osim ove mreže ima i još jednu mrežu. Svaki od odgovora ove komande predstavlja ustvari po jedan mrežni adapter. Head Node ima još jednu mrežu koja u njegovom slučaju predstavlja javnu mrežu. Prostom proverom, pozivanjem komande ping 8.8.8.8 sa sva tri računara možemo videti da glavni računar, odnosno Head Node, uspešno pogadja server na adresi 8.8.8.8 dok to nije slučaj sa ostala dva računara. Ono što ćemo sada uraditi jeste podesiti maskaradu, i dodatno, omogućiti Compute Node-ovima da preko Head Node-a, koji će predstavljati Gateway, imaju izlaz na javnu mrežu.

Gateway podešavanja

Situacija koju trenutno imamo jako je sliča situaciji sa slike.

Za početak pristupićemo fajlu koji pod punim nazivom /etc/sysconfyg/network-scripts/ifcfg-enp0s3 i ispratiti njegov sadržaj. Bitne su nam linije:

BOOTPROTO=DHCP 
DEVICE=enp0s3
ONBOOT=yes

Ukoliko je sadržaj ovog fajla odgovarajući možemo ga zatvoriti.

Nakon toga pređimo na fajl sa punim nazivom /etc/sysconfig/network-scripts/ifcfg-enp0s8. Linije koje su nam bitne u ovom fajlu jesu:

BOOTPROTO=static
IPADDR=10.0.0.1
NETMASK=255.255.255.0
DEVICE=enp0s8
ONBOOT=yes

Na ovaj način smo podesili da računar HeadNode ima adresu 10.0.0.1 u našoj internoj mreži. Sada je potrebno restartovati NetworkManager kako bi izmene bile sačuvane.

systemctl restart NetworkManager

Sada ćemo preći na dva računara koja predstavljaju Compute Node-ove, njima ćemo dodeliti ip adrese 10.0.0.2 i 10.0.0.3 respektivno i kao gateway mu dodeliti adresu 10.0.0.1, odnosno računar koji je Head Node našeg sistema.

Na oba računara potrebno je izmeniti fajl /etc/sysconfig/network-scripts/enp0s3. Linije na koje ćemo obratiti pažnju u ovom fajlu jesu:

TYPE=ethernet
BOOTROTO=static
IPADDR=10.0.0.2  // u slučaju drugog Compute Node-a imaćemo adresu IPADDR=10.0.0.3
NETMASK=255.255.255.0
GATEWAY=10.0.0.1
DEVICE=enp0s3
ONBOOT=yes

Takodje, sada je potrebno restartovati NetworkManager i na ova dva računara.

systemctl restart NetworkManager

IP Maskarada

Vraćamo se sada na naš HeadNode. Za početak ćemo izlistati mežne interfejse koje imamo, i kojim zonama oni pripadaju. Zone koristimo kako bismo u zavisnosti od mreže i mrežnog interfejsa definisali pravila po kojima će firewall raditi. Pozvaćemo komandu firewall-cmd --get-active-zone. Očekivan odgovor jeste spisak od dva mržna interfejsa pod nazivom enp0s3 i enp0s8 koji pripadaju public zoni. Sada ćemo već postojeću public zonu firewall-a podeliti na dve manje zone, koje će se zvati internal i external kako bismo definisali različita pravila firewall-a za za različite mrežne interfejsa HeadNode-a. Pozivanjem dve komande podelićemo public zonu na dve manje.

nmcli c mod enp0s8 connection.zone internal
nmcli c mod enp0s3 connection.zone external

Sada bi ponovnim pozivanjem komande firewall-cmd --get-active-zone trebalo da dobijemo sasvim drugačiji odgovor. Sada ćemo postaviti maskaradu na zonu external. Pokrenimo komandu

firewall-cmd --zone=external --add-masquerade --permanent.

Nakon ove komande izvršićemo ponovno učitavanje samog firewall-a firewall-cmd --reload. Sada ćemo komandom firewall-cmd --zone=external dobiti odgovor da li je maskarada aktivna ili ne, očekivan odgovor je yes. Sada moramo da proverimo da li je omogućen ipv4 forwarding. Po pravilu ako je maskarada omogućena trebalo bi da bude omogućen i ipv4 forwarding. Svakako, pregledom fajla /proc/sys/net/ipv4/ip_forward dobićemo i odgovor da li je baš tako. Komanda cat /proc/sys/net/ipv4/ip_forward bi trebalo da vrati 1 i na taj način nam zaista pokaže da je ipv4 forwarding aktivan. Sada ćemo podesiti da paketi koji nam stižu sa javnog interneta, odnosno na zonu external stižu na port 22 budu prosleđeni na port 2222 internal zone.

firewall-cmd --zone=external --add-forward-port=port=22:proto=tcp:toport=2222.

Sada kada izlistamo informacije o external zoni firewall-cmd --list-all --zone=external trebalo bi da dobijemo informacije o servisima koje koristi, kao i načinu na koji reguliše rad sa paketi, odnosno na koje portove šalje odgovarajuće pakete. Ukoliko želimo da ovo bude trajno, ovoj komandi dodaćemo opciju --permanent.Sada ćemo podesiti maskaradu i na zonu internal.

firewall-cmd --zone=internal --add-masquerade --permanent

Sada izvršimo ponovno pokretanje firewall-a firewall-cmd --reload. Dalje ćemo pokrenuti komande

firewall-cmd --direct --add-rule ipv4 nat POSTROUTING 0 -o enp0s3-j MASQUERADE
firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i enp0s8 -o enp0s3 -j ACCEPT
firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i enp0s3 -o enpo0s8 -m state --state RELATED,ESTABLISHED -j ACCEPT

kako bismo dodatno definisali pravila koja omogućavaju da se i paketi iz interne mreže šalju, preko našeg Gateway-a na javni internet.

NFS – Network File System

NFS ili Network File System jeste distribuiranu fajl sistemi koji omogućava računarima da pristupe datotekama preko mreže. Sam NFS predstavlja jako bitan deo svakog HPC klastera pošto omogućava različitim računarima da pristupaju istim fajlovima, pošto se kod HPC klastera često dešava da različiti procesi na različitim računarima moraju imati pristup istim fajlovima. NFS jeste fajl sistem koji to omogućava.

Na početku valja napomenuti da se svaki NFS sastoji iz dva dela. Serverskog i klijentskog dela, u zavisnosti od toga koji računar pripada kojoj od ove dve jedinice razlikovaće nam sa pojedina podesavanja. U našem slučaju HeadNode odnosno računar sa ip adresom 10.0.0.1 u internoj mreži predstavljaće server, dok će računari sa adresama 10.0.0.2 i 10.0.0.3 u internoj mreži predstavljati klijente. Za početak pristpućemo fajlu /etc/hosts svakog računara. i podesiti ih tako da svuda budu isti, i da svaki sadrži svoju ip adresu i hostname i internoj mreži i adresu druga dva računara i njihob hostname u internoj mreži. Preko vi editora. pošto je on već instaliran na CentOS-u, možemo izmeniti sadržinu sva tri fajla da sadrže samo sledeće linije

10.0.0.1 HeadNode
10.0.0.2 Node1
10.0.0.3 Node2

Ovaj korak nam će nam kasnije biti neophodan prilikom instalacije Slurm raspoređivača i PBS/Torque, za sada nije, ali korisno je da već sada to uradimo.

Nakon ovoga izvršićemo reboot sistema na sva tri računara

Konfiguracija NFS servera

Za početak ćemo, zaustaviti firewall kako bi Compute Node-ovi bez problema mogli da pristupe HeadNode-u. Kasnije ćemo na odgovarajući način rešiti i ovaj problem, ali za sada neka to ostane ovako.

systemctl stop firewalld
system disable firewalld

Uradimo ponovo reboot celog sistema.

I sada zaista pristupamo podešavanjima nfs servera.

Instalirajmo prvo neophodne nfs-utils pakete yum -y install nfs-utils

Sada, startujemo servise koji su neophodni kako bi nfs radio neometano.

systemctl enable rpcbind
systemctl enable nfs-server
systemctl enable nfs-lock
systemctl enable nfs-idmap
systemctl start rpcbind
systemctl start nfs-server
systemctl start nfs-lock
systemctl start nfs-idmap

Sada možemo napraviti neki direktorijum koji ćemo dodati našem file system-u, ili možemo koristiti neki već postojeći. Mi ćemo kreirati novi direktorijum koji će se zvati nfsshare. Stoga, mkdir /nfsshare Naš zadatak je dakle da uspemo da ovaj direktorijum učinimo deljenim izmedju svih računara sistema.

Svi folderi, koje želimo da učinimo deljivim između računara nekog sistema smeštamo u odgovarajućem formatu u fajl /etc/exports, dakle podelićemo naš direktorijum, koji smo napravili, ostalim računarima.

/nfsshare 10.0.0.0/24 (rw,sync,no_root_squash,no_subtree_check)

Na ovaj način smo obavestili nfs server da očekuje da u nekom trenutku podeli direktorijum /nfsshare svima u mreži 10.0.0.0/24 Postoji i mogućnost da svakom računaru ponaosob podelimo direktorijum. Na primer, ukoliko bi u datoteci /etc/exports postojala linija sledeće sadržine /nfsshare Node1 (rw,sync,no_root_squash,no_subtree_check) to bi značilo da će pomenuti direktorijum biti deljiv samo sa računarom sa hostname-om Node1.

Treba pomenuti i opcije koje se mogu navesti prilikom deljenja direktorijama. Opcije se mogu pronaći na adresi https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/5/html/Deployment_Guide/s1-nfs-server-config-exports.html

Pozvaćemo komandu exportfs -a koja će zaista učiniti naš direktorijum deljenim. A zatim i restartovati nfs server systemctl restart nfs-server

Konfiguracija NFS klijenta

Za početak neophodno je i na klijentu instalirati pakete nfs-utils. yum -y install nfs-utils. Dalje, kao i na server strani, omogućićemo i pokrenuti neophodne servise.

systemctl enable rpcbind
systemctl enable nfs-server
systemctl enable nfs-lock
systemctl enable nfs-idmap
systemctl start rpcbind
systemctl start nfs-server
systemctl start nfs-lock
systemctl start nfs-idmap

Sada ćemo napraviti na klijentskim računarima, odnosno na Compute Node-ovima, direktorijume koji će na neki način „primiti“ ono što server podeli sa njima. Običaj je da se takvi direktorijumi nalaze u /mnt direktorijumu, ali ne mora biti tako. Naš krajnji cilj jeste da delimo /home direktorijume svih usera. Naglasimo da naziv direktorijuma koji se deli ne mora biti isti kao i na serveru. Na oba računara ćemo napraviti jedan takav direktorijum mkdir /mnt/nfsshare

Postoje dva načina za samo mountovanje sa nfs klijenata, koji su u suštini isti. Prvi način jeste pokretanje komande iz komandne linije sladeće sadržine mount -t nfs 10.0.0.1:/nfsshare /mnt/nfsshare, što predstavlja ručno mountovanje. Drugi način, koji ćemo mi koristiti jeste koristeći se datotekom /etc/fstab. Datoteka /etc/fstab u stvari treba da sadrži nešto slično komandi koju smo u prvom slučaju naveli komandnoj liniji, razlika je što se u ovoj datoteci mogu navesti više ovakvih komandi, i onda pozivom komande mount -a izvršiti mountovanje svih direktorijuma iz ove datoteke. Mi ćemo se služiti drugim načinom. Dakle u datoteku /etc/fstab dodajemo sledeću liniju 10.0.0.1:/nfsshare /mnt/nfsshare nfs defaults 0 0 Nakon svih ovih koraka, direktorijum /nfsshare će biti ddeljen između svih računara u mreži 10.0.0.0/24. Lako se može proveriti. Ukoliko na nfs serveru, odnosno našem HeadNode-e napravimo datoteku u koju ćemo upisati „Hello World“. ta datoteka će biti vidljiva u istom tom obliku i nfs klijentima, odnosno našim Compute Node-ovima.

Kako bismo dodatno podesili naš nfs sistem, sada ćemo startovati ponovo firewall na svim računarima naše mreže systemctl enable firewalld
system start firewalld
Kada bismo sada pokušali da izvršimo mountovanje nekog direktorijuma sa bilo kod od klijenata to ne bi bilo moguće, dobili bismo grešku „Connection timed out“. Ono što je sada potrebno da uradimo jeste da obavestimo firewall o svim novim servisima. Dakle,

firewall-cmd --permanent --add-service=rpcbind
firewall-cmd --permanent --add-service=nfs-server
firewall-cmd --permanent --add-service=nfs-lock
firewall-cmd --permanent --add-service=nfs-idmap
firewall-cmd --reload

Na ovaj način smo obezbedili da nam nfs radi i pored aktivnosti firewall-a

SSH Passwordless autentifikacija

SSH protokol nam omogućava da pristupamo udaljenim računarima preko mreže i na taj način izvršavamo određene komande na njima. Putty kao alat koji često koristimo, koristi SSH protokol. Ono što je jako bitno kod ovakvog sistema koji se sastoji od više računara upravo jeste SSH Passwordless autentifikacija. Kada se korisnik jednom prijavi na sistem, on će imati mogućnost pristupa svim ostalim računarima bez unošenja šifre. Osim toga, SSH passwordless u oba pravca predstavlja osnovu i preduslov za kreiranje svakog batching sistema, u našem slučaju PBS/Torque i SLURM-a.

Dodavanje korisnika u sistem

Za dodavanje korisnika,kao i za pozivanje bilo koje komande za koju želimo da se izvrši na svim računarima našeg sistema kreiraćemo skriptu, koja će obaviti to umesto nas. Naravno samo kreiranje skripte nije neophodno, taj posao se može obaviti i na teži način. Skriptu ćemo nazvati commandScript.sh

command="" 
for i in $* ; do 
    if [ "$i" != "" ]; then 
        command=$"$command $i" 
    fi 
done 

for i in ‘cat /etc/hosts‘; do 
     echo "$i:" 
     ssh root@$i $command 
done

Dodavanjem korisnika na HeadNode-u a zatim i dodavanjem korisnika na ostalim čvorovima, pomoću gore navedene skripte, obezbedićemo da isti korisnika na različitim čvorovima imaju isti UID. Sada ćemo dodati dva korisnika-dmijailovića i trešnjicu.

useradd dmijailovic -u 700 -g students -s /bin/bash -p crypt("dmijailovic94","salt")
commandScript.sh useradd dmijailovic -u 700 -g students -p sarYIiRn5yUS6

Pri čemu sarYIiRn5yUS6 predstavlja sifru koju za korisnika dmijailovic možemo naći u datoteci /etc/shadow. Isti postupak ćemo sada ponoviti i za korisnika tresnjica.

useradd tresnjica -u 701 -g students -s /bin/bash -p crypt("tresnjica94","salt")
commandScript.sh useradd tresnjica-u 701 -g students -p saeRnta2EXcE2 

Na ovaj način dodali smo dva usera na sva tri node-a, i oba korisnika će imati iste UID i kredencijale svuda na sistemu. Treba napomenuti da će se za svakog korisnika generisati home direktorijum sa putanjom /home/username, ali da će isti svoje poddirektorijume kao što su Desktop, Downloads, Documents i ostale dobiti tek prilikom prvog prijavljivanja na sistem preko grafičkog, GNOME Desktop, interfejsa.

SSH autentifikacija

SSH Autentifikacija za svakog korisnika

Pošto sada već imamo nekoliko korisnika na našem sistemu, a to su root, dmijailovic **i **trešnjica možemo da se logujemo kao bilo ko od njih. Za sada ćemo se na sistem na sva tri node-a logovati kao korisnik root.

Za početak generišimo ključ koji će predstavljati osnovu naših ssh kredencijala. ssh-keygen Tada će nam sistem ponuditi da izaberemo lokaciju na koju želimo da smestimo ključ, samo ćemo kliknutu Enter i nastaviti dalje, lokacija u koji sistem smešta ključ u ovakvoj situaciji jeste ~/.ssh/id_rsa. Dalje, sistem će nam ponuditi da unesemo passphrase, takođe ćemo samo pritisnuti taster *Enter *i nastaviti.

Passhprase nam u ovom trenutnu ne donosi nikakvu korist, čak nam i odmaže pošto mi ne želimo da imamo nikakvu vrstu šifre prilikom prijavljivanja na drugi računar. Sada ćemo izvršiti upis našeg javnog ključa koji je generisan i zatim ga proslediti svim node-ovima. cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

Prosleđivanje ovog ključa svim node-ovima radimo uz pomoć NFS-a koji smo instalirali nedavno. Dodajemo putanju do direktorijuma .ssh u /etc/exports. i kao opciju mu dodajemo ro odnosno read only, dakle

/root/.ssh 10.0.0.0/24(ro,no_root_squash,no_subtree_check)

dodajemo u datoteku /etc/exports. U ovom koraku ćemo osim ovog direktorijuma, /root/.ssh, u /etc/exports dodati i celokupan /home direktorijum.

/home 10.0.0.0/24(ro,no_root_squash,no_subtree_check)

Na ovaj način ćemo i /home direktorijume svakog korisnika podeliti ostalim računarima. Sada ćemo na klijentskim NFS računarima u /etc/fstab dodati dve linije.

HeadNode:/root/.ssh /root/.ssh nfs defaults 0 0
HeadNode:/home /home nfs defaults 0 0

Sada smo pokazali upravo ono što smo rekli malopre, ne mora svaki direktorijum nfs sistema da se dodaje kao poddirektorijum direktorijuma /mnt. Čak i nakon svega ovoga neće baš sve raditi kako treba, kada pokušamo da se ssh-ujemo sa HeadNode-a na Node1 recimo ssh root@Node1, dobijamo sledeći odgovor

The authenticity of host ‘Node1 (10.0.0.2)’ can’t be established. ECDSA key fingerprint is 01:23:45:67:89:ab:cd:ef:01:23:45:67:89:ab:cd:ef. Are you sure you want to continue connecting (yes/no)? yes Failed to add the host to the list of known hosts (/root/.ssh/known_hosts)

Razlog zbog čega dobijamo ovakav odgovor jeste nfs, odnosno to što smo podesili da direktorijum /root/.ssh bude ro na nfs-u. Jedan od načina da rešimo ovo jeste da postavimo u /etc/exports da direktorijum /root/.ssh ima opciju rw. Ali to nije pravi način. Umesto toga ćemo na svim node-ovima izmeniti sadržaj datoteke /etc/ssh/ssh_config. Ispod linije *Host** u pomenutoj datoteci dodaćemo sledeće linije

StrictHostKeyChecking no
UserKnownHostsFile=/dev/null
LogLevel error

Kada vršimo ssh passwordless podešavanja za root korisnika možda je potrebno i izmeniti linije u datoteci /etc/ssh/sshd.conf

PermitRootLogin without-password
PubkeyAuthentication yes

Za svakog novog korisnika koga dodajemo, kao što su dmijailovici trešnjica generisaćemo novi ključ komandom ssh-keygen i potom to upisati u datoteku authorized_keys. cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys Direktorijum /.ssh svakog korisnika će se nalaziti u njegovom /home direktorijumu. Sada je naš posao skoro gotov. Međutim kada probamo da izvršimo pristupimo, recimo HeadNode node-u sa Node1 node-a pomocu nekog od novih naloga dobićemo odgovor Permission denied, moraćemo jos nešto da ispravimo. Ovaj problem se javlja zbog toga što grupa kojoj pripadaju tresnjica i dmijailovic nema dozvolu za ssh pristup. U datoteku /etc/ssh/sshd.conf moraćemo pod kategoriju AllowGroups da osim users grupe dodamo i našu students grupu čiji su dmijailovic i tresnjica članovi. Sada možemo pristupiti preko svog nalog a koristeci ssh svakom node-u sistema sa bilo kog drugog node-a.

Hostbased SSH autentifikacija

Drugi način za obezbeđivanje Passwordless SSH autentifikacije, jeste Hostbased authentifikacija. Koristeći se ovim načinom ne moramo vršiti autentifikaciju svakog usera, dovoljno je da čvorovi sistema uspostave međusobno poverenje i oni sami dozvole korisnicima sistema da se prijavljuju na druge čvorove. I kod ovog načina autentifikacije uslov je da postoje korisnici sa istim UID i GID na svim čvorovima sistema. Kod ssh autentifikacije postoje klijenti i serveri, server je ono na šta se logujemo, a klijent je čvor koji se loguje, pošto je nama cilj da komunikacija bude dvosmerna, i da se sa bilo kog čvora možemo okačiti na bilo koji drugi čvor, svi računari sistema biće i klijenti i serveri, dakle podešavanja za sva tri čvora našeg sistema biće istovetna.

Za početak u datoteci /etc/ssh/ssh_config promenićemo nekoliko linija

HostbasedAuthentication yes
EnableSSHKeysign yes

Nakon toga i u datoteci /etc/ssh/sshd_config promenićemo sadržaj odgovarajućih linija

HostbasedAuthentication yes
IgnoreRhosts no

Na ovaj način omogućili smo Hostbased autentifikaciju.

Ponavljam, sva ova podešavanja vršićemo na sva tri čvora našeg sistema.

Nakon toga datoteku /etc/ssh/shosts.equiv ćemo popuniti sa imenima svih čvorova. U ovu datoteku smeštamo imena svih čvorova u koje taj računar ima poverenja. Na svakom računaru, datoteku ćemo popuniti sledećim linijama.

HeadNode
Node1
Node2

Poslednji korak koji moramo uraditi jeste kopiranje javnog ključa sa svakog čvora na sve ostale čvorove, dakle sa HeadNode-a ćemo pokrenuti sledeće komande

ssh-keyscan -t rsa Node1 >> /etc/ssh/ssh_known_hosts
ssh-keyscan -t rsa Node2 >> /etc/ssh/ssh_known_hosts

Na čvoru sa hostname-om Node1 pokrenućemo sledeće komande

ssh-keyscan -t rsa HeadNode >> /etc/ssh/ssh_known_hosts
ssh-keyscan -t rsa Node2 >> /etc/ssh/ssh_known_hosts

i na čvoru Node2

ssh-keyscan -t rsa HeadNode >> /etc/ssh/ssh_known_hosts
ssh-keyscan -t rsa Node1 >> /etc/ssh/ssh_known_hosts

Sada ćemo izvršiti reboot celog sistema. Kada se sistem podigne Hostbased ssh autentifikacija biće omogućena i više nećemo zavisiti od svakog korisnika ponaosob.

Literatura

  • https://access.redhat.com/documentation/en/
  • https://en.wikipedia.org/wiki/HPC
  • https://en.wikipedia.org/wiki/Network_File_System
  • https://www.slothparadise.com
  • https://www.globo.tech/
  • https://www.centos.org/