SSH raktai: kaip jungtis prie serverio be slaptažodžio

Paskutinį kartą atnaujinta: 2026-10-06 · Ovanap Team, knygos „Linux nuo nulio“ autoriai (leidėjas – Ovanap, Monine AS)

Trumpas atsakymas: savo kompiuteryje sukurk raktų porą komanda ssh-keygen -t ed25519, viešąją jos dalį nusiųsk į serverį komanda ssh-copy-id admin@203.0.113.10 ir prisijunk kaip įprasta – ssh admin@203.0.113.10. Serveris tave atpažins pagal raktą, o slaptažodžio nebeklaus. Privatusis raktas ~/.ssh/id_ed25519 niekada neišvyksta iš tavo kompiuterio ir turi turėti teises -rw-------.

Svarbiausia

  • SSH raktų pora – du failai: privatusis raktas (id_ed25519), kuris lieka pas tave, ir viešasis (id_ed25519.pub), kuris keliauja į serverį.
  • Privatųjį raktą ssh ignoruoja, jei jį gali skaityti kiti vartotojai (ssh(1) vadovas).
  • ~/.ssh katalogui rekomenduojama tik savininko prieiga, o authorized_keys – skaityti ir rašyti tik savininkui. Jei šį failą, ~/.ssh ar namų katalogą gali keisti kiti, sshd jo nenaudos, kol įjungta StrictModes (sshd(8) vadovas).
  • ssh-keygen -t nurodo rakto tipą; ed25519 – tipas, kurį naudoja knyga (ssh-keygen(1)).
  • OpenSSH – projektas, kuriam priklauso ssh, sshd, ssh-keygen ir ssh-copy-id (openssh.com).

Slaptažodis turi dvi ydas: jį galima atspėti, ir kaskart jungiantis jis keliauja į serverį. Naujo serverio adresą robotai randa per kelias valandas nuo sukūrimo ir nuolat bando prisijungti. Raktų prisijungimas šias ydas pašalina, o sukonfigūruoti jį – kelios minutės.

Pavyzdžiuose tavo kompiuteris – Linux Mint su vartotoja ona, serveris – 203.0.113.10 (dokumentacijai rezervuotas adresas), serverio vartotojas – admin. Visur įrašyk savo reikšmes.

Kaip veikia raktų pora: spyna ir raktas

SSH (angl. Secure Shell) – užšifruotas būdas valdyti kitą kompiuterį per tinklą tekstu, lyg sėdėtum prie jo. Tavo kompiuteryje veikia klientas ssh, serveryje – paslauga sshd, kuri pagal numatymą klauso 22 prievado.

Raktų porą lengviausia įsivaizduoti taip:

  • Viešasis raktas – tai spyna. Ją ramiai prisuki prie serverio durų visiems matomoje vietoje: pagal spyną rakto nepasigaminsi.
  • Privatusis raktas – tai pats raktas. Vienintelis daiktas, kuris spyną atrakina, ir jis visada lieka tavo kišenėje.

Jungiantis serveris pateikia matematinį iššūkį, kurį atlaikyti gali tik privačiojo rakto turėtojas. Tavo klientas atsako pasirašytu atsakymu, o pats privatusis raktas iš kompiuterio neiškeliauja nė centimetro. Pasiklausantis pašalinis matytų tik iššūkį ir atsakymą, iš kurių rakto neatkursi.

1 žingsnis: sukurk raktų porą savo kompiuteryje

ssh-keygen -t ed25519

Programa užduos tris klausimus:

Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/ona/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
  • Vieta – spausk Enter. Numatytojoje vietoje ~/.ssh/id_ed25519 raktą ras visos SSH priemonės.
  • Apsaugos frazė (angl. passphrase) – spyna ant paties privačiojo rakto failo. Ji nėra serverio slaptažodis ir į serverį niekada nekeliauja: ji užšifruoja raktą diske, todėl pavogtu failu be frazės nepasinaudosi. Rašant frazę ekrane nieko nematyti – tai normalu. Pamirštos frazės atkurti neįmanoma.

Jei raktų toje vietoje jau turi, programa paklaus, ar juos perrašyti. Čia stabtelėk: galbūt senoji pora dar naudojama kitame serveryje.

Sėkmės atveju pamatysi:

Your identification has been saved in /home/ona/.ssh/id_ed25519
Your public key has been saved in /home/ona/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:... ona@mint

Atsirado du failai: id_ed25519 – privatusis raktas („your identification“), ir id_ed25519.pub – viešasis (galūnė .pub – iš public). Pamatyti juos gali komanda ls -la ~/.ssh – katalogas .ssh paslėptas, nes jo vardas prasideda tašku.

2 žingsnis: nusiųsk viešąjį raktą į serverį

ssh-copy-id admin@203.0.113.10

Programa paima tavo .pub failą, prisijungia prie serverio (šį kartą dar paklaus serverio slaptažodžio) ir prideda viešąjį raktą kaip naują eilutę faile ~/.ssh/authorized_keys. Eiga atrodo taip:

/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/ona/.ssh/id_ed25519.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
admin@203.0.113.10's password:

Number of key(s) added: 1

Eilutė Number of key(s) added: 1 reiškia, kad raktas įrašytas. authorized_keys – paprastas tekstinis failas serveryje: kiekviena jo eilutė yra vienas viešasis raktas, kuriam leidžiama jungtis.

Naujas VPS? Daugelis tiekėjų leidžia viešąjį raktą įklijuoti jau kuriant serverį. Atspausdink jį (cat ~/.ssh/id_ed25519.pub) ir įklijuok vieną eilutę, prasidedančią ssh-ed25519, į tiekėjo formos lauką „SSH key“. Jei forma prašo privačiojo rakto – sustok: taip niekada neturi būti. Visa naujo serverio apsaugos tvarka – straipsnyje Kaip saugiai paruošti VPS serverį.

3 žingsnis: prisijunk be slaptažodžio

ssh admin@203.0.113.10

Jei frazės nenustatei, serveris įleis nieko neklausęs: kvietimo eilutė pasikeis į serverio vardą. Jei raktą užrakinai fraze, pamatysi Enter passphrase for key '/home/ona/.ssh/id_ed25519': – tai klausiama tavo rakto frazės, o ne serverio slaptažodžio. Skirtumas esminis: slaptažodis keliaudavo į serverį, o frazė tik atrakina failą tavo kompiuteryje.

Įsitikinti, kad esi serveryje, padeda hostname: atsakys serverio vardu. Sesija baigiama žodžiu exit.

Teisės: kodėl SSH atsisako „per daug atviro“ rakto

SSH tyčia griežtas failų teisėms (kaip jas skaityti, rašome straipsnyje Linux failų teisės):

Failas ar katalogas Kur Ką turi rodyti ls -la Jei teisės per plačios
~/.ssh/id_ed25519 tavo kompiuteryje -rw------- (tik tu skaitai ir rašai) ssh raktą ignoruoja
~/.ssh/ abiejose pusėse prieiga tik savininkui (drwx------) rekomenduojama riboti
~/.ssh/authorized_keys serveryje skaityti ir rašyti tik savininkui (-rw-------) sshd failo nenaudoja (StrictModes)

ssh-keygen ir ssh-copy-id paprastai šias teises nustato patys. Jei raktą ar failą kopijavai ranka, sutvarkyk jas:

chmod 600 ~/.ssh/id_ed25519
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Pirmoji eilutė vykdoma tavo kompiuteryje, trečioji – serveryje. Jei failus serveryje kopijavai su sudo, jie gali priklausyti root; tada nuosavybę grąžink savininkui, pavyzdžiui, sudo chown -R admin:admin /home/admin/.ssh.

Pirmasis prisijungimas: serverio piršto antspaudas

Jungiantis prie naujo serverio pirmą kartą, SSH paklausia:

The authenticity of host '203.0.113.10 (203.0.113.10)' can't be established.
ED25519 key fingerprint is SHA256:...
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

Tai svarbiausia SSH saugos akimirka. Piršto antspaudas (angl. fingerprint) – trumpa serverio rakto santrauka, iš kurios atpažinsi, ar jungiesi prie to paties serverio. Jei tiekėjo skydelis jį rodo, prieš rašydamas yes palygink. Pačiame serveryje tą patį antspaudą atspausdina ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub. Reikia viso žodžio yes – viena raidė y netinka.

Atsakius antspaudas įrašomas į tavo ~/.ssh/known_hosts, todėl klausimas nebesikartos. Jei vieną dieną serveris parodytų kitą raktą, SSH sustabdytų ryšį perspėjimu WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!. Tai gali reikšti apsimetėlį, bet dažniausiai – kad serverį įdiegei iš naujo. Jei pakeitimą žinai, seną įrašą ištrinsi komanda ssh-keygen -R 203.0.113.10, ir kitą kartą antspaudo bus klausiama „kaip pirmą kartą“.

Dažnos klaidos ir ką jos reiškia

Connection refused. Serveris gyvas, bet 22 prievade niekas neklauso: SSH serveris neįdiegtas arba paslauga neveikia. Ubuntu 24.04 ir naujesnėse sistemose prievado klauso ssh.socket, todėl tikrink systemctl status ssh.socket – turi būti active (listening). Būsena inactive (dead) prie paslaugos ssh iki pirmojo prisijungimo dar nereiškia gedimo.

Connection timed out. Dažniausiai neteisingas IP adresas arba prievadą uždarė ugniasienė. Jei serveris tavo, per tiekėjo web konsolę patikrink sudo ufw status: ar yra OpenSSH taisyklė.

Permission denied (publickey). Ryšys įvyko, bet serveris tavo rakto nepripažino. Įsitikink, kad jungiesi su tuo pačiu privačiuoju raktu, kurio viešąją dalį nusiuntei, ir kad jungiesi teisingu vartotojo vardu. Jei tai naujas VPS, galbūt tiekėjas slaptažodžių prisijungimą išjungė jau diegdamas: tada ssh-copy-id neveiks, o raktą reikės perkelti iš dar atidarytos root sesijos arba per web konsolę.

Raktas sukurtas serveryje. Serveryje sukurta pora nieko neatrakina – ji ten tik guli. Kurk porą kompiuteryje, iš kurio jungiesi, ir siųsk su ssh-copy-id.

Privatusis raktas nusiųstas „patikrinti“. Niekada. Failas be .pub neišvyksta iš tavo kompiuterio. Jei taip jau nutiko, laikyk raktą sudegintu: sukurk naują porą ir pakeisk viešąjį raktą serveryje.

Kaip atšaukti raktą

Visas rakto leidimas – viena eilutė viename faile. Prisijunk prie serverio, atverk nano ~/.ssh/authorized_keys, nueik į eilutę, kurios gale matai savo vardą ir kompiuterį (pavyzdžiui, ona@mint), ištrink ją klavišais Ctrl+K, išsaugok (Ctrl+O, Enter) ir išeik (Ctrl+X). Nuo šiol tas raktas durų neatidaro.

Kas toliau: uždaryk slaptažodžius

Raktų prisijungimas apsaugo tik tada, kai slaptažodžių prisijungimas išjungtas. Tai daroma serverio SSH nustatymuose (PasswordAuthentication no, PermitRootLogin no), bet tvarka čia svarbi: pirmiausia įsitikini, kad raktu įleidžia naujame lange, ir tik tada uždarai slaptažodžius. Visą seką su keliu atgal aprašėme straipsnyje Kaip saugiai paruošti VPS serverį: 10 žingsnių. Failams kopijuoti per tą patį užšifruotą ryšį skirta scp – ją ir kitas tinklo komandas rasi Linux komandų atmintinėje.

Dažni klausimai

Ar saugu kam nors parodyti viešąjį SSH raktą? Taip. Viešasis raktas (.pub) – tarsi spyna: pagal ją rakto nepasigaminsi. Saugoti reikia privatųjį raktą id_ed25519.

Kur kurti SSH raktų porą – savo kompiuteryje ar serveryje? Savo kompiuteryje, iš kurio jungiesi. Serveriui reikia tik viešosios dalies – ją nuneša ssh-copy-id.

Ar reikia SSH raktui apsaugos frazės (passphrase)? Nebūtina, bet verta: ji užšifruoja privatųjį raktą diske ir niekada nekeliauja į serverį. Pamirštos frazės atkurti neįmanoma.

Kodėl serveris vis tiek klausia slaptažodžio, nors sukūriau raktą? Dažniausiai viešasis raktas į serverį nenukeliavo arba pora sukurta ne tame kompiuteryje. Paleisk ssh-copy-id ir palauk eilutės Number of key(s) added: 1. Jei klausiama frazės – raktas veikia.

Ką daryti, jei pamečiau privatųjį SSH raktą? Prisijunk per tiekėjo web konsolę, sukurk naują porą savo kompiuteryje ir naują viešąjį raktą įrašyk į ~/.ssh/authorized_keys, o seno rakto eilutę ištrink.

Išmok SSH saugiai, savo virtualioje mašinoje

Knygoje „Linux nuo nulio“ SSH skirtas visas 15 skyrius su laboratorija: pirmiausia prisijungi slaptažodžiu, tada sukuri raktų porą ir prisijungi be jo – viską savo virtualioje mašinoje, nieko neiškišdamas į internetą. 16 skyriuje tas pats raktas atveria tavo pirmąjį tikrą VPS, o priede palyginti tiekėjai, kuriuos pavyko patikrinti oficialioje dokumentacijoje. Visos 15 skyriaus komandos – priedo komandų puslapyje.

Pradėk nuo nemokamos ištraukos (įvadas ir visas terminalo skyrius, registruotis nereikia), o jei patiks – įsigyk knygą.