Ką daryt?

Gyvenimo projektų tęstinumas

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ą.

  1. Siunčiamės puttygen.exe
  2. 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.
  3. Pasileidžiam programą, pasirenkam RSA, rakto dydį 4096 ir generuojam. Atrodo va taip: putty key generator
  4. Išsaugom privatų raktą kur nors.
  5. Nusikopijuojam ssh-rsa dalį ir nusiunčiam adminui – ją galima ramiai siuntinėti per emailą ar slacką ar teamsus.
  6. 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

Taigi, stuktelėjus 42 metams, nori nenori pradedi susimąstyti apie reinkarnaciją ir kas bus su projektais, kurie paleisti ir prižiūrimi, o gal net jais kas nors naudojasi. Nutariau pasirūpinti jų tęstinumu, bet Žmonai, aišku, šitas mano sumanymas taip pusiau patiko ;) Na, bet kur ji dėsis.. Makaronus tai verdu aš.

Taigi planas:

  • Inventorizuot sistemas ir surinkti informaciją apie jas į vieną vietą
  • Sugalvot ką daryt su slaptažodžiais
  • Išmokyt prižiūrėt serverius
  • Varyt į Tibetą

Inventoriziją ir slaptažodžių pasidalinimo techniką dar reikia sugalvot ir padaryt, o trumpas pamokėles, kaip reikėtų perimti serverius ir darbus iš sysadmino aprašysiu. Jos bus pritaikytos konkrečiam naudojimui, tai serveriai yra Linux amd64, o kai kurie – arm64, o administratoriaus darbo vieta – Windows (berods 11).

Kitas postas bus apie tai, kaip prisijungti prie serverių, kai senasis administratorius geras ir sako – “atsiųsk raktą”.

Komentuoti galima ir fediversijoje pažymėjus @saint@river.group.lt