Slušaj robot čitača
Šta je github "Deprecation Notice" i kako ga se rešiti?
Možda ste ovih dana nešto radili na github-u, i onda zatekli mail "Deprecation Notice" koji vas smara što ste svom nalogu preko terminala pristupili pomoću lozinke, i obaveštava vas kako ovo nakon 13-og Avgusta više neće biti moguće?
Ako ste poput mene sigurno ste zamahali pesnicom po vazduhu, i čangrizavo jauknuli "sva ova sigurnost nas čini manje sigurnim!"
No, nikakva čangrizavost nam neće pomoći, i ovim problemom se moramo pozabaviti, što pre, to bolje. Ako kliknete na link u mailu koji vam je github poslao, videćete mnogo, jako uspavljujućeg teksta, o nekakvim tokenima. Ono što nije odmah jasno, je da postoji i drugi način da se zaobiđe gubljenje pristupa vašim repozitorijumima. Ni jedan nije "težak", ali meni lično pristupanje github-u pomoću tokena deluje kao gore rešenje, bar što se "UX" tiče. Ovde ćemo prvo obraditi kako da pređemo na SSH authentikaciju, a onda na brzaka i kako da podesimo ove tokene, ako baš hoćete da idete tom rutom.
Kako da proverimo da li već imamo SSH ključeve?
Pre nego što generišemo SSH ključeve, proverićemo na brzaka da li ih već imamo. Otvorite komandnu liniju:
Otvorite gitbash, i ukucajte:
ls -la ~/.ssh Enter
ls izlistava sadržaj foldera, slično kao dir u windowsu, čime možemo videti da li već imamo ključeve. -a prikazuje sve, pa i skrivene fajlove, i -l prikazuje sadržaj kao listu da bude lakši za čitanje.
~ - kratica za user folder (C:/Users/UserName), a .ssh je skriveni folder koji tražimo.
ls -la ~/.ssh Enter
ls: cannot access '/c/Users/Mimosa/.ssh': No such file or directory
Ako pretraga ne nađe .ssh folder, to onda najverovatnije znači da nemate ključeve od ranije. Druga opcija je da imate ključeve, ali su isti sačuvani na nekoj drugoj, nepoznatoj lokaciji, pa ćemo ih ponovo generisati.
Moguće je da ćete imati folder bez sadržaja, u kom slučaju biste videli samo . koja predstavlja trenutni folder, a .. koje predstavljaju roditeljski folder.
Kako generisati SSH ključeve?
Ako folder ne postoji, možemo ga kreirati sa:
mkdir ~/.ssh Enter
cd ~/.ssh Enter
Sada ćemo kreirati klučeve pomoću komande:
ssh-keygen -t rsa -b 4096 -C "pera.mitic@karanfili.co.rs" Enter
Gde ćete umesto pera.mitic@karanfili.co.rs ukucati svoju email adresu.
-t - tip, jer postoje mnogi protokoli a mi koristimo RSAprotokol da generišemo ključeve. -b broj bitova koje želimo da koristimo, i to 4096 u ovom sl, -C - obavezno veliko slovo, i u pitanju je komentar, za koji obično koristimo svoju email adresu
Ovo pokreće wizard-a koji će imati još par pitanja za nas:
Enter file in which to save the key > Enter
Enter passphrase > Enter
Enter same passphrase again > Enter
"Enter file in which to save the key" - ime fajla u kome hoćemo da sačuvamo ključeve, po defaultu ih čuva u gore pomenutom .ssh folderu i sa imenom id_rsa. Ako pritisnete Enter prihvatili ste te default vrednosti. U suprotnom možete zadati neko ime.
"Enter passphrase" - Enter da se ne koristi lozinka, ili možete uneti lozinku da budete extra sigurni
"Enter same passphrase again" - Ako ste uneli lozinku, ponovite je, ako je niste uneli, samo Enter opet
I time smo kreirali ključ. Ako sada ponovimo ls -la komandu, videćemo da smo kreirali par ključeva. id_rsa je naš privatni ključ koji ne delimo ni sa kim, kao što ne delimo ni sa kim ni svoju lozinku, dok je id_rsa.pub javni ključ koji delimo sa github-om i heroku-om.
Aktiviranje SSH ključeva na kompjuteru
Prvo ćemo pokrenuti SSH agenta:
> eval "$(ssh-agent -s)" Enter
Agent pid XXXX
-s od start, pokreće ssh agenta
Kada dobijemo pid, znamo da proces radi, te možemo da registrujemo fajlove:
ssh-add -K ~/.ssh/id_rsa Enter
Povezivanje sa githubom pomoću SSH ključeva
Ulogujte se na github, kliknite na svoju profil sliku, gore desno u meniju, i izaberite Settings a u settingsu izaberite SSH and GPG keys. Kliknite na New SSH key gde treba dati ime ključa, kao na primer: "Poslovni kompjuter", "laptop" i sl, nešto po čemu biste znali na koju mašinu se ključ odnosi, ako imate veliki broj mašina s kojih radite. Drugo polje traži da unesemo sadržaj samog ključa. Da bismo ovaj sadržaj videli koristićemo:
> cat ~/.ssh/id_rsa.pub Enter
Kopiramo ceo ispis, sa sve ssh-rsa na početku, i pejstujemo u ovo drugo polje na githab-u, i sada pritisnemo Add SSH key dugme.
Ovo sada znači da u buduće kada kreiramo nove repozitorijume, da bismo ih pušovali na github, treba da koristimo SSH adresu, koja počinje sa git@github.com umesto https adrese koju smo do sada koristili sa lozinkom.
Da bismo ovu remote adresu videli, treba da otvorimo repozitorijum, kliknemo na zeleno Code dugme, izaberemo SSH, i prekopiramo adresu.
Ako je u pitanju novi, tek kreiran repzitorijum, github će nam izlistati potrebne komande da se na njega povežemo, i ako nam tu daje https adresu, opet možemo izabrati ssh, čime će on prilagoditi instrukcije. Kako se meni čini, kada na jednom mestu odaberemo SSH, github će i na ostalim mestima nuditi SSH kao podrazumevani izbor, sve dok negde opet ne selektujemo HTTPS.
Ako smo već koristili ovaj repo bez ssh-a, onda smo koristili https remote url, i da bismo počeli da koristimo ssh, moramo ovo promeniti, pa ćemo kucati:
git remote set-url origin git@github.com:gitHubUserName/repoName.git Enter
Ovo će promeniti remote adresu unutar .gitconfig fajla, tako da će u buduće ovaj repo uvek koristiti SSH adresu. [1]
Provera da li je sve podešeno ispravno
Da proverimo da li smo promenili remote url:
> git remote -v Enter
Koja će nam vratiti trenutni remote url.
Da vidimo da li konekcija radi, ukucaćemo:
> ssh -T git@github.com Enter
The authenticity of host 'github.com' can't be established.
RSA key fingerprint is: SHA256:xXx
Are you sure you want to continue connecting (yes/no)? > yes
Enter
Hi github-korisnicko-ime! You've successfully authenticated, but GitHub does not provide shell access.
Konačno, ako u github podešavanjima proverite stanje našeg ssh ključa, primetićete da pored njega stoji Never used. Da bismo to promenili, sve što treba da uradimo jeste jedan push. Ako se nakon push-a ovo stanje promeni u nešto kao "Last used within the last week", što će pisati čak iako smo malopre uradili push. Ta promena statusa nam govori da smo ovaj put pristupili github-u preko SSH i da nismo koristili lozinku kao do sada.
Ako ste pri kreiranju SSH ključa koristili passphrase, git bash će vam tražiti da ukucate taj passphrase prilikom pusha, slično kako bi normalno tražio da ukucate github lozinku. Naravno, niko ne želi da ukucava ovu lozinku svaki put, tako da ćemo sada videti i šta da uradimo da je SSH agent sačuva i da nas više ne maltretira.
Kako da git zapamti našu ssh lozinku da je ne bismo svaki put kucali?
S gornjim podešavanjima, git će od sada koristiti SSH da pristupi github-u, i time smo rešili problem pristupa našim repozitorijumima nakon 13-og Avgusta, ali kako da nateramo github da upamti naš SSH passphrase?
Za početak, proverite da li u svom user folderu imate fajlove ~/.profile ili ~/.bashrc
Ako imate bar jedan, otvorite ga pomoću VSC:
> cd ~ Enter
> code .bashrc Enter
Ako file ne postoji, kreiraćemo ga sa:
> echo > .bashrc Enter
I onda ga otvorite u VSC. U fajl unesite sledeći kôd:
env=~/.ssh/agent.env
agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }
agent_start () {
(umask 077; ssh-agent >| "$env")
. "$env" >| /dev/null ; }
agent_load_env
# agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2= agent not running
agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)
if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
agent_start
ssh-add
elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then
ssh-add
fi
unset env
I sačuvajte. Ugasite i ponovo pokrenite git bash
WARNING: Found ~/.bashrc but no ~/.bash_profile, ~/.bash_login or ~/.profile.
This looks like an incorrect setup.
A ~/.bash_profile that loads ~/.bashrc will be created for you.
Enter passphrase for /c/Users/UserName/.ssh/id_rsa: *** Enter
Identity added: /c/Users/UserName/.ssh/id_rsa
(pera.mitic@karanfili.co.rs)
Od sada pa na dalje, kada pristupate github-u sa ovog računara, nećete morati da ukucavate SSH lozinku [2]
Pristupanje github-u preko tokena
Alternativni pristup github-u preko git bash-a od 13. Avgusta 2021, će biti preko tokena, i ovo deluje kao preferirani metod što se tiče github developera. Kao što gore pomenuh, meni je SSH pristup nekako čistiji, i ja pristupam preko SSH, tako da ovo objašnjenje s tokenima možda neće biti toliko detaljno kao SSH objašnjenje.
Ako ste već podesili SSH, nema potrebe da podešavate i tokene
U svakom slučaju, ovo podešavanje ćemo započeti tako što ćemo se ulogovati na github , kliknuti na našu profil ikonicu, i zatim na Settings. U settings-u odaberite Developer settings, i konačno Personal access tokens.
Sada kliknite na Generate new token, potvrdite svoju github lozinku, i sada je potrebno da unesete neku pribelešku u Note polje. Ovo može da bude bilo šta, samo da vama ima smisla da sutra znate za koju svrhu ste kreirali ovaj token. Tokeni se mogu koristi za veći broj stvari, ne samo za pristup github-u preko bash-a, pa otuda i ove "beleške". Potom je potrebno i da odaberete koja prava sebi dajete na kada pristupite github-u preko bash-a korišćenjem ovog tokena. Čekirajte odgovarajuće kućice, i kliknite na Generate token dugme.
Obavezno sačuvajte ovaj token, jer je ovo poslednji put da će vam ga github prikazati.
U opštem sl nije problem što vam ga github više nikada neće prikazati, jer je ove tokene vrlo lako obrisati, i nove kreirati. To je donekle i ideja, ako vam neko hakuje nalog, vrlo brzo možete otkazati taj token i kreirati novi, i taj haker više neće imati pristup vašem nalogu. Ako ste na tuđem kompjuteru, možete kreirati privremeni token, i obrisati ga kad završite sa radom, bez bojazni da bi taj neko imao pristup vaši repozitorijuma samo zato što je vaš token ostao negde sačuvan. Ono što je meni problem s tokenima jeste da se dalje koriste na identičan način kako smo do sada koristili lozinku, osim što token ne možemo upamtiti kao što smo mogli lozinku.
Dodatno, kao što je "windows credential manager" čuvao lozinku na kompjuteru, tako će sad čuvati i token.
Sada kada uradite git pull ili git push, git bash će vam tražiti username i password. Username je kao i do sada vaš github username, a password je zapravo ovaj token koga nam github više neće pokazati a koji mi nismo upamtili. Naravno, možete ga kopirati u konzolu, ali to je previše posla.
Kako da git bash zapamti token?
Sledeći korak verovatno već imate podešen, u git bash ukucajte
git config user.name Enter
git config user.email Enter
Što bi trebalo da vam vrati vaš github username i email. Ako ih nemate podešene, podesite ih pomoću:
git config --global user.name "gitHubUserName" Enter
git config --global user.email "pera.mitic@karanfili.co.rs" Enter
Token ćemo sačuvati na isti način na koji smo ranije čuvali lozinku, korišćenjem:
> git config --global credential.helper cache Enter
Sada kada uradite git pull ili push, git bash će vas poslednji put pitati da se ulogujete, i na dalje će koristi vaše kredencijale iz keša.
Brisanje sačuvanih kredencijala iz git-a
Ako nam je iz bilo kog razloga potrebno da obrišemo jednom sačuvanje pristupne podatke za github, kucaćemo:
> git config --global --unset credential.helper Enter
Članak prvi put objavljen: 25.6.2021.
Poslednje izmene: 10.2.2022.
Autor: k.