1. Báza znalostí
  2. Cloud a servery
  3. Bezpečnosť
  4. Pripojenie na server pomocou SSH kľúčov
  1. Báza znalostí
  2. Cloud a servery
  3. Virtuálny server (VPS)
  4. Pripojenie na server pomocou SSH kľúčov
  1. Báza znalostí
  2. Začíname
  3. Užitočné návody
  4. Pripojenie na server pomocou SSH kľúčov
  1. Báza znalostí
  2. Cloud a servery
  3. Pripojenie na server pomocou SSH kľúčov

Pripojenie na server pomocou SSH kľúčov

Zabezpečený prístup k príkazovému riadku servera je možné nadviazať cez SSH (Secure SHell). Protokol a nástroj SSH nahradil svojich starších predchodcov ako telnet, rlogin alebo rsh, aby doplnil chýbajúcu bezpečnostnú vrstvu v podobe plne šifrovanej komunikácie medzi dvoma neautentifikovanými strojmi v nezabezpečenej sieti.

Vďaka SSH dokážeme získať dnes už takmer k ľubovoľnému serveru kryptovaný vzdialený prístup a v príkazovom riadku servera tak môžeme pracovať ako keby sme sedeli priamo pred ním. Stačí sa pripojiť s prihlasovacími údajmi (meno používateľa a heslo) na adrese servera (IP adresa). Na serveri beží serverová časť SSH (zväčša démon sshd), ku ktorej sa zo vzdialeného počítača pripájame pomocou klientskej časti SSH (nástroj ssh).

Populárna implementácia SSH je vydávaná pod názvom OpenSSH a nájdeme ju predinštalovanú na mnohých operačných systémoch ako sú Windows, MacOS, Linux alebo *BSD. Ide o nástroj šírený bezplatne s otvoreným zdrojovým kódom. O vývoj sa starajú programátori OpenBSD Project.

WebSupport ponúka Shell cez SSH na všetkých svojich webhostingoch. Pre virtuálny server (VPS) od WebSupportu sú prihlasovacie údaje na SSH zaslané e-mailom pri objednávke servera. Linuxový príkazový riadok WebSupport pre svoj hosting poskytuje aj ako webovú konzolu, v ktorej môžeme pracovať pomocou webového prehliadača ako je Google Chrome. Získame tak prístup k linuxovému príkazovému riadku z prostredia, ktoré funguje nezávisle na operačnom systéme.

Príprava prostredia servera

Ak používame VPS, v prvom rade je potrebné zabezpečiť aktuálnosť všetkých balíkov. Nainštalujeme teda všetok updatovaný softvér pomocou dvoch príkazov v jednej dávke:

sudo apt update && sudo apt upgrade

Ak systém nájde aktualizovateľné balíčky, takto sa opýta, či ich chceme začať inštalovať:

Do you want to continue? [Y/n]

Stlačíme kláves y ak chceme začať aktualizačný proces alebo kláves n, ak aktualizovať nechceme. Následne stlačíme kláves Enter.

V prípade použitia jedného z webhostingov stačí iba aktivovať Shell a prihlasovacie údaje s adresou aj s konkrétnym príkazom na pripojenie cez SSH budú automaticky vygenerované. 

Vytvorenie súkromného a verejného SSH kľúčA

Prvýkrát sa cez SSH musíme pripojiť pomocou prihlasovacích údajov (meno používateľa a heslo) na server (IP adresa) takto:

ssh meno@server

Bezpečnejšia forma autentifikácie ako prihlasovacie údaje je však použitie SSH kľúčov. Vytvoríme teda súkromný a verejný SSH kľúč takto:

ssh-keygen

Keďže najpoužívanejšie operačné systémy ako Windows, MacOS alebo Linux majú predinštalované OpenSSH, postup vytvárania kľúčov bude v príkazovom riadku rovnaký. Najskôr sa vypíše informácia o tom, že sa chystáme vytvoriť pár kľúčov – jeden súkromný (private), druhý verejný (public). Pri zadávaní názvu súboru a hesla stačí iba stlačiť kláves Enter, aby sme ponechali prednastavený názov súboru a kľúče bez hesla.

Svoj privátný kľúč, resp. súbor id_rsa nikdy nezverejňujeme.

Súkromný kľúč sa uložil do obyčajného textového súboru s názvom id_rsa, pričom cesta k tomuto súboru bola vypísaná v zátvorke. V rovnakej ceste nájdeme aj obyčajný textový súbor id_rsa.pub, ktorý obsahuje verejný kľúč. Súbor so súkromným kľúčom nikdy nikde nezverejňujeme. Súbor s verejným kľúčom pošleme na server, aby nás server pri budúcom pokuse o prihlásenie mohol identifikovať už na základe verejného kľúča bez hesla.

Pridanie verejného SSH kľúčA na server

Linux a MacOS obsahujú nástroj ssh-copy-id, vďaka ktorému veľmi jednoducho zapíšeme verejný kľúč zo súboru id_rsa.pub na server do súboru povolených kľúčov (~/.ssh/authorized_keys) takto:

ssh-copy-id meno@server

Windows v čase písania tohto návodu nástroj ssh-copy-id neobsahuje, a tak si musíme poradiť inak:

type %USERPROFILE%\.ssh\id_rsa.pub | ssh meno@server "cat >> ~/.ssh/authorized_keys"

Pričom meno zameníme za prihlasovacie meno používateľa, server za IP adresu servera a počas prihlasovania zadáme heslo. Pri druhom pokuse o prihlásenie sa už server nebude pýtať na meno ani heslo a stačí zadať iba IP adresu servera (namiesto server):

ssh server

Ak sa meno, ktorým sme práve prihlásení, nezhoduje s menom na serveri, musíme pri prihlasovaní na server zadať aj používateľské meno takto:

ssh meno@server

Zabezpečenie SSH servera

V prípade použitia VPS odporúčame vykonať konkrétne nastavenia SSH servera, vďaka ktorým sa budete cez SSH pripájať bezpečnejšie a zlepší sa aj celková bezpečnosť VPS.

Zmena portu

Štandardne SSH server (démon) počúva na porte 22. Je všeobecne známe, že tento port obsadzuje služba SSH, a tak býva často terčom automatizovaných útokov. Ak ale port zmeníme na iné číslo, povedzme na 4444, útočníkom to trochu sťažíme a náš server viac ochránime pred automatizovanými útokmi.

Pre lepšie zabezpečenie prístupu na server pomocou SSH odporúčame obmedziť ho len z povolených statických IP adries pomocou firewallu. Pripadne blokovať pokusy o prihlásenie pomocou nástroja ako fail2ban.

Otvoríme konfiguračný súbor SSH servera a prepíšeme port 22 na port 4444:

sudo nano /etc/ssh/sshd_config

V otvorenom konfiguračnom súbore nájdeme riadok s obsahom #Port 22, ktorý prepíšeme na Port 4444. Súbor uložíme pomocou klávesovej skratky Ctrl + X a následne stlačením klávesu y a potvrdením klávesom Enter. Nakoniec ešte SSH server reštartujeme, aby sa uložené zmeny prejavili:

sudo systemctl restart ssh.service

Odteraz pre pripojenie k SSH serveru musíme špecifikovať okrem mena a servera ešte aj port (-p 4444):

ssh meno@server -p 4444

Obmedzenie používateľov

Ďalším krokom k bezpečnejšiemu SSH servera je výber používateľov, ktorí sa môžu cez SSH pripojiť. To môžeme urobiť priamo vymenovaním používateľov (AllowUsers) alebo skupiny používateľov (AllowGroups).

Viac o používateľoch a skupinách v Linuxe sa dočítate v návode Správa súborov a používateľov v linuxovom príkazovom riadku.

Otvoríme konfiguračný súbor SSH servera (prvý riadok) a vyhľadáme direktívu AllowUsers a/alebo AllowGroups. Ak direktívy neexistujú, zapíšeme ich na koniec konfiguračného súboru (druhý a tretí riadok). Súbor uložíme pomocou klávesovej skratky Ctrl + X a následne stlačením klávesu y a potvrdením klávesom Enter. Nakoniec ešte SSH server reštartujeme (štvrtý riadok), aby sa uložené zmeny prejavili.

sudo nano /etc/ssh/sshd_config
AllowUsers meno1 meno2 meno3
AllowGroups skupina1 skupina2 skupina3
sudo systemctl restart ssh.service

Mená používateľov (meno1 meno2 meno3) a názvy skupín (skupina1 skupina2 skupina3) nahradíme podľa potreby. Ak zadávame viacero mien a skupín, oddeľujeme ich od sebe medzerou.

Iba používatelia, ktorí sú zapísaní v konfiguračnom súbore servera SSH pod direktívou AllowUsers a/alebo AllowGroups sa môžu prihlásiť cez SSH. Ostatným bude prístup zamietnutý.

Zakázanie používateľa root

Dobrou praxou môže byť zakázať prihlásenie cez SSH pod používateľským účtom s najvyššími oprávneniami (root), hneď po vytvorení používateľa s oprávnením používať nástroj sudo.

Používateľa root zakážte len, ak máte funkčného užívateľa na ktorého viete najvyššie práva povýšiť.

Otvoríme konfiguračný súbor SSH servera (prvý riadok), vyhľadáme direktívu PermitRootLogin a zmeníme ju tak, ako ukazujeme v druhom riadku. Súbor uložíme pomocou klávesovej skratky Ctrl + X a následne stlačením klávesu y a potvrdením klávesom Enter. Nakoniec ešte SSH server reštartujeme (tretí riadok), aby sa uložené zmeny prejavili.

sudo nano /etc/ssh/sshd_config
PermitRootLogin no
sudo systemctl restart ssh.service

Odteraz sa už používateľ root cez SSH neprihlási.

Povolenie root prístupu len pre určité príkazy

Niekedy je dobré zakázať prihlásenie cez SSH pre používateľa root a zároveň povoliť spustenie niektorých príkazov pod týmto účtom. Takýto prístup sa môže hodiť pri nastavení zálohovania (napr. cez nástroj rsync).

Najskôr musíme pridať verejný SSH kľúč do súboru s povolenými kľúčmi používateľa root (/root/.ssh/authorized_keys). Prvý riadok platí pre Linux a MacOS, druhý riadok pre Windows, pričom server zameníme za IP adresu servera a počas prihlasovania zadáme heslo pre účet root:

ssh-copy-id root@server
type %USERPROFILE%\.ssh\id_rsa.pub | ssh root@server "cat >> /root/.ssh/authorized_keys"

Prihlásime sa na server cez SSH (prvý riadok) a otvoríme súbor s povolenými kľúčmi používateľa root (druhý riadok) v tom riadku, kde je zapísaný náš verejný kľúč. Na začiatok riadka pridáme obsah nižšie (tretí riadok), ktorý bude možné spustiť cez SSH pod účtom root. Súbor uložíme pomocou klávesovej skratky Ctrl + X a následne stlačením klávesu y a potvrdením klávesom Enter.

ssh server
sudo nano /root/.ssh/authorized_keys
command="/cesta/k/prikazu argument1 argument2" ssh-rsa ...

Otvoríme konfiguračný súbor SSH servera (prvý riadok), vyhľadáme direktívu PermitRootLogin a zmeníme ju tak, ako ukazujeme nižšie (druhý riadok). Súbor uložíme pomocou klávesovej skratky Ctrl + X a následne stlačením klávesu y a potvrdením klávesom Enter. Nakoniec ešte SSH server reštartujeme (tretí riadok), aby sa uložené zmeny prejavili.

sudo nano /etc/ssh/sshd_config
PermitRootLogin forced-commands-only
sudo systemctl restart ssh.service

Odteraz sa používateľ root cez SSH na server prihlási iba vtedy, ak bude chcieť hneď po prihlásení spustiť vyššie povolený príkaz.

Zhrnutie

Vytvorili sme SSH kľúče (súkromný a verejný) a následne sme verejný SSH kľúč skopírovali na server, aby sme sa mohli prihlasovať bezpečnejšou metódou (nie prihlasovacím menom a heslom). Tiež sme ukázali, ako efektívne zabezpečiť SSH server proti (automatizovaným) útokom.

Aktualizované 26. mája 2021

Bol pre vás tento návod nápomocný?

Mohlo by vás tiež zaujímať:

Spýtajte sa nás, radi poradíme
Po - Ne 8:00-22:00
Kontaktovať podporu