Kas dirba su Linux puikiai žino, kaip svarbu apsaugoti savo paskyrą kai jungiamasi per SSH protokolą prie nutolusio serverio. Dažniausiai yra naudojami slaptažodžiai, tačiau pastarieji gali būti nulaužiami. Todėl nusprendžiau parašyti apie kiek kitokį prisijungimą prie serverio.
Šiame straipsnelyje trumpai aprašysiu kaip prisijungti prie Linux serverio be slaptažodžio naudojantis sugeneruotu raktu. Dėmesio! Visa pateikiama informacija buvo atliekama Linux sistemoje remiantis oficialaus tinklapio ssh.com medžiaga. Čia pateikiama su paprastinta versija. Patariu prieš vykdant veiksmus pirma perskaityti straipsnį iki galo.
Raktų sugeneravimas
Taigi pradedame. Pirmiausia reikia sugeneruoti privatų ir viešąjį raktą. Tai daroma vedant komandą kur ssh-keygen pati komanda, -f ~/.ssh/neo-key nusakoma vieta kur bus patalpinti raktai, bei raktų pavadinimas mano atveju neo-key ir -t ecdsa -b 521 raktų šifravimo algoritmas.
ssh-keygen -f ~/.ssh/neo-key -t ecdsa -b 521
Generatorius paprašys įvesti saugumo frazę Enter passphrase (empty for no passphrase): kurią primygtinai rekomenduoju naudoti. Jei viskas pavyko, tai ekrane turite pamatyti kažką panašaus į tai
Komanda ls -l .ssh/ galime patikrinti ar raktai yra vietoje.
ls -l .ssh/
Kaip matome viskas ten, kur ir turi būti.
neoromancer@neotech:~$ ls -l .ssh/
viso 8
-rw------- 1 neoromancer neoromancer 444 gruod 3 13:41 neo-key
-rw-r--r-- 1 neoromancer neoromancer 273 gruod 3 13:41 neo-key.pub
Kaip matome gauname du failus neo-key ir neo-key.pub. Failas neo-key yra privatus raktas, kuris liks gulėti kompiuteryje ,kuriame jį ir sugeneravome, o viešasis raktas neo-key.pub keliaus į nutolusį serverį.
Viešojo rakto patalpinimas į serverį
Kad saugiai perkeltume viešąjį raktą į nutolusį serverį, reikia įvykdyti sekančią komandą:
ssh-copy-id -i ~/.ssh/neo-key.pub vartotojas@ip_adresas
Į klausimą Are you sure you want to continue connecting (yes/no)? atsakome yes ir paprašius įvesti slaptažodį suvedame serverio prisijungimo slaptažodį. Po sėkmingos operacijos parašoma, kad vienas raktas įtrauktas ir jau galima išbandyti prisijungimą, mano atveju tai bus ssh pi@192.168.1.120
Baigiamieji darbai
Pasibandome sujungimą su serveriu ir jei mūsų neklausia prisijungimo slaptažodžio, tada galime serveryje pakoreguoti sshd_config, kad apskritai nepriimtų prisijungimų su slaptažodžiais. Tam vedame komandą:
sudo nano /etc/ssh/sshd_config
Ir atsiradusiame faile susirandame #PermitRootLogin forced-commands-only ir nuėmę groteles įrašome PermitRootLogin yes. Taip pat įrašome PasswordAuthentication no Failo turinys turėtų atrodyti panašiai taip (ištrauka):
# Authentication:
#LoginGraceTime 2m
#PermitRootLogin prohibit-password
PermitRootLogin yes
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10
PubkeyAuthentication yes
# Expect .ssh/authorized_keys2 to be disregarded by default in future.
AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
#AuthorizedPrincipalsFile none
#AuthorizedKeysCommand none
#AuthorizedKeysCommandUser nobody
# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
#HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# HostbasedAuthentication
#IgnoreUserKnownHosts no
# Don't read the user's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes
# To disable tunneled clear text passwords, change to no here!
PasswordAuthentication no
#PermitEmptyPasswords no
Spaudžiame Ctrl+O tada Ctrl+X taip išsaugodami ir išeidami iš redaguojamo failo. Belieka perkrauti patį ssh. Tai padarome įvykdę komandą:
sudo service ssh restart
SSH prisijungimo redagavimas reikalauja atidumo, todėl primygtinai rekomenduoju pasidaryti redaguojamų failų kopijas, kad jei suklydus ir negalint prisijungti būtų galimybė atstatyti konfigūraciją. Būtent PasswordAuthentication no yra atsakingas už slaptažodžio reikalavimą, todėl šį parametrą aktyvuokite įsitikinę, kad viskas tikrai veikia korektiškai.
Viskas, dabar jungiatės tik su viešuoju raktus. Reikia pastebėti, kad ssh galima susiderinti visiškai pagal savo poreikius bet apie tai kada nors vėliau.