Duok savo SSH raktą, pridėsiu prie serverio..
Ne kartą esu matęs, kai programeris prašo priėjimo prie serverio, o adminas, jei geranoriškai nusiteikęs sako – “tai duok savo ssh raktą, pridėsiu prie serverio” ir iškart pamiršta šitą problemą keliom dienom ar net savaitėm. O kur dar pasišaipymas iš serijos – “ne privačią dalį, o viešą – generuok raktą iš naujo”. Košmaras.
Tai kokio čia rakto nori, kas tas viešas reikalas ir privatus ir kodėl negalima paprasčiau – tegu pasako slaptažodį, kurio programeris pažada neužsirašyti į sąsiuvinį ir parodo kaip jungtis prie serverio, kur jau ten skaitys žurnalą (logus) ir drebėdamas, kad netyčia ko nors nepridirbtų, atsijungs nuo serverio.
SSH raktas – kam jo reikia?
Šiaip adminai liaudis tokia, kad nelabai nori dalintis prieiga prie serverio, o ką ten dar šnekėt apie slaptažodį, kuris kurtas per kokią nors stalo žaidimo sesiją ir saugomas kaip nuosava akis. Na, taip pat yra ir kita priežastis, ogi ta, kad dauguma adminų taip pat nenaudoja slaptažodžių jungtis prie serverio, jį saugo slaptažodžių skrynutėse, kad galėtų naudoti ypatingais reikalais – suvesti jį per internetinę konsolę (ilo, ipmi ar pan – apie tai – kitą kartą) arba tada, kai prie serverio prijungtas monitorius su klaviatūra ir negali jungtis per SSH (pvz – nėra interneto).
Tai kaip jie jungias? Tai vat naudodami tą rakčiuką, o tiksliau – raktų porą. Raktų pora – tai tarpusavyje susiję du raktai, vienas viešas – jį galima dalinti, o kitas – privatus – jį reikia saugoti, niekam nerodyti, o dar geriau – apsaugoti slaptažodžiu. Tie raktai tarpusavyje susiję burtų būdu (matematika), kuri sako, kad jei turi slaptą raktą, o serveris turi tavo viešą raktą – tai galima juos kaip puzlę matematiškai sujungti ir taip užtikrinti, kad slapto rakto turėtojui galima jungtis į serverį. Tai va – tuomet nereikia žinoti slaptažodžio, galima tiesiog nukopijuoti rakčiuko .pub dalį į specialią vietą ir jungtis. Kiekvienas vartotojas turėtų turėti savo raktą, o tam, kad adminas nežinotų slaptosios dalies – jis prašo tą raktą sugeneruoti pačiam programuotojui.
Kaip generuojama raktų pora?
Kompas – MacOS
Generuojam RSA tipo raktą (išbandytas, lėtas, didelis, bet daug kur palaikomas):
❯ ssh-keygen -t rsa -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/saint/.ssh/id_rsa): /tmp/naujasraktas
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Passphrases do not match. Try again.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Passphrases do not match. Try again.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Passphrases do not match. Try again.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /tmp/naujasraktas
Your public key has been saved in /tmp/naujasraktas.pub
The key fingerprint is:
SHA256:SJMOzUtU2US5wb0m2O/ihJQx1VUrLZMiV0rl9GgT9BI saint@keisen.local
The key's randomart image is:
+---[RSA 4096]----+
| ...*+=oE...|
| + ...* B O .|
| . B o+ * % = |
| = +.+* = * |
| + S + |
| . . . |
| . .. |
| .. . |
| ... |
+----[SHA256]-----+
Dabar kaip darysiu daryti nereikėtų, bet parodysiu kuo skiriasi privatus nuo viešo rakto:
Viešas raktas:
❯ head /tmp/naujasraktas.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC+nW2Z+7loNKUXg9tGLS7JHF/uINZjwDL1Bmd/DPL+JOopMPiqKsuJKyZp471udsxqUsMvzOPY2Cu/Q4tdwET5r7auAyA7v2rC2eFFJZwCbxxW1rY+PbENmfUeJw9CrJJF8sxcYoAvtLtwz5fu15jO3EfBE5HnRDlqH49sB5i0WYCSVDA2sOoWFyw2tCFulMsYEsSNYse/xUzO//8NZSIdwt5yWNQTkiYcNIPd4BuXnCLIFltykYanqYB+2sufG2LNhmg/qoR6L4tgwR/YNvk26GlgB1zwLiV+NVOgJu3HN/FRtgTtV++BcjPpFE4l0ypzY0KVGzuYVaAlOA7vRLxKXPZ0yeGkoLq0pfg1nrfnzQsxteAlivhLVU1NqpJHv2Sp/7GxBrBcbNAozwC1hZQHtYzfxvEp9w0NGCS4HREBdLX4B5RoKoLwMh2DcYYH7T+ql25zeFczhtonOZ8EM4ayAJbVeMbOwAO7MWWP6D3R2Ev5Z4KwxPGcd2hzz4V7H3TCro++VAAPcIlHnID+BydATzZbkkNu1OJpXwcccwXwxR/S7fPYeqs0gbBWj4qrVbrmtpOJlvdnM3ll93dq8liZI6avdPO0STpRbOHPyCVGFmVc59/RPxuTfU/s5VZKir7FWTyetNZoel+Y+bYaeXmthMZ/3fSTjCatDvm5y3DoJQ== saint@keisen.local
Privatus arba slaptas raktas:
❯ head /tmp/naujasraktas
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABDo6hOLoH
❯ tail /tmp/naujasraktas
GbyBQQV4acgQcB/TwXL0iod4PqpdgK9+KzXzVjdI6kr4Z3VdFvTdZ1tTILuo48I8Pb0q2Z
qcDgWXj6lvg3y1WFy9/QN/w3E=
-----END OPENSSH PRIVATE KEY-----
Tai kuo jie skirias? Kadangi dauguma pradedančiųjų adminų turi dėmesio sutrikimo problemų, šį kartą parodau:
- Viešas raktas turi failo plėtinį .pub
- Viešas raktas prasideda ssh-rsa
- Privatus raktas prasideda ——-BEGIN OPENSSH PRIVATE KEY——-
- Privatus raktas baigiasi ——-END OPENSSH PRIVATE KEY——-
Administratoriui reikia siųsti raktą, kuris yra viešas – ssh-rsa .pub.
Kompas Windows
Su windows kiek sudėtingiau – reikia daugiau machinacijų. Aš įtariu, kad dabar egzistuoja ir kitokie variantai, panašesnį į MacOS per cmd, bet kadangi esu senis su barzda, tai parodysiu old school metodą.
- Siunčiamės puttygen.exe
- Reikėtų patikrinti parašą, bet kas ten jį tikrina, gerai, jei darbiniam kompe yra antivirusas. O jei rimtai – parašysiu ir apie tai, kaip galima patikrinti tuos parašus.
- Pasileidžiam programą, pasirenkam RSA, rakto dydį 4096 ir generuojam. Atrodo va taip:
- Išsaugom privatų raktą kur nors.
- Nusikopijuojam ssh-rsa dalį ir nusiunčiam adminui – ją galima ramiai siuntinėti per emailą ar slacką ar teamsus.
- Galima išsaugoti public dalį ir putty formatu, bet jos geriau nesiųsti adminui. Nors ją galima transformuoti į OpenSSH formatą – sutaupysi admino laiko ir erzulį.
N.B. Viešo rakto galima nesaugoti, burtai (matematika) tokia gudri, kad iš privataus rakto galima pagaminti viešą bet kada.
Pvz kaip atrodo ppk viešas raktas ne OpenSSH formatu:
❯ cat ZmonosViesasRaktas.ppk
---- BEGIN SSH2 PUBLIC KEY ----
Comment: "rsa-key"
AAAAB3NzaC1yc2EAAAADAQABAAACAQCU4Oj4XH2lzuDUic9oTo24BsebV4RT1cQI
QTwDhNS/i3npLN4u80ZRhR7m0j7UdZRDSlDcUovtSvdYAO2NPiwVPJGMLZWeAS/N
YMGwdRV9CGtfhpTRXJEVhkbv2+gG0pIHA0XtOlkxX9VMKCUGdT2tmtpZgyaKIwNj
bMuJU3GJATfAi4yG0Q6hTiqaLDFf2IYnk4MizT9WRWpbe9BvH0JNXGRjGKbl2ez5
ichdw5EzPt1UVInORJTMvO8o3xytCB7qqCEVjwO/e/Xcfk4OnrXAynfhqCsPEyg1
MhU9QlelEY6Q0HsUcDHesJuBATPs6UWniL9EaIq72EbrDhpGQlsV5lPWMceV0F6E
mQ38MPQjay+48C+LHtIgTiq1woMkOoHoMtnRubvQ8JW916OLX60iafAYbO9LY/Jz
sQ9j1BJ7zT0SnwdE8dPcTH+Q4hDU00729J6Fxuhod+8BYhdLofN47xiyPZ5zyxW5
l4yvYb8eyrzmNYok2epBOXGb7WEB9zjxmupeD0iJMHCkfONS3ltNDa49OLgHLEeM
NakQ4i5blspublh9v3/3hpLqD3+CQLalV0rNDy91m9oqK9oTX7K6RXlCbXNvDNY6
SNIL64CRmQvcOKQk8/8aboANzBJfgHxbaYe75bYsOy4R6kyTy2/l6UZomlJi3eTu
OoUMXqnKdw==
---- END SSH2 PUBLIC KEY ----
OpenSSH – tai dažniausiai naudojama programa-serveris, per kurią jungiamasi prie serverio.
Tai štai – raktą išsiuntėm, laukiam dabar admino atsakymo, greičiausiai reikės ir firewall sutvarkyt (atidaryt prieigą), dar kokio nors moralo išklausyt ir bus galima prisijungti.
Komentuoti galima ir fediversijoje pažymėjus @saint@river.group.lt