Si të rregulloni Git duke përdorur çelësin dhe llogarinë e gabuar SSH


Kur lidheni me një server të largët Git, si Github, klienti juaj duhet të vërtetojë duke përdorur shenja të bazuara në HTTPS ose SSH. Nëse po përdorni këtë të fundit, mund të hasni probleme me trajtimin e çelësave, duke përfshirë Git duke përdorur çelësin e gabuar SSH dhe duke ju nënshkruar në një llogari tjetër.

Ku qendron problemi?

Nëse nuk keni fare një çelës SSH në llogarinë tuaj, pothuajse me siguri do të merrni gabimin e mëposhtëm kur përpiqeni të shtyni:

Permission denied (publickey).
fatal: Could not read from remote repository.

Ky është ndoshta gabimi më i zakonshëm i Git, dhe zgjidhja për këtë është e thjeshtë - vendosni një çelës SSH për llogarinë tuaj.

Por, gjithashtu mund të hasni në një mesazh gabimi me pamje shumë të ngjashme, edhe pasi të keni konfiguruar siç duhet një çelës SSH. Nëse përdorni shumë llogari Git, mund të keni këtë gabim:

Permission to Username/Repository.git denied to otheraccount.
fatal: Could not read from remote repository.

Në këtë rast, Github ka pranuar çelësin tuaj SSH, por ende nuk po funksionon siç duhet; edhe pse depoja juaj lokale git është konfiguruar për të përdorur adresën e duhur të emailit, nëse i jepni çelësin e gabuar, ai do t'ju vërtetojë si përdorues i gabuar. Ky është thelbësisht i ndryshëm nga gabimi i parë. Nuk është leje e mohuar, por në vend të kësaj leje e mohuar për të dhënë llogari.

Ky mund të jetë problem nëse keni shumë llogari dhe duhet të përdorni çelësa të veçantë për secilën prej tyre. Për shkak të mënyrës se si funksionon vërtetimi SSH, ai ende do të ju identifikojë në serverin në distancë të Git, por si përdorues i gabuar. Kur Github kontrollon nëse ai përdorues ka akses në depo, ka të ngjarë të dështojë, duke prodhuar kështu gabimin duke thënë se llogaria juaj nuk ka leje për të përdorur depon tuaj.

Zgjidhja është të menaxhoni siç duhet çelësat e shumtë SSH, në mënyrë që klienti juaj git  të mos dërgojë çelësin e gabuar në server. Ju mund ta bëni këtë duke redaktuar skedarët e konfigurimit të SSH.

Sigurohuni që Git të jetë konfiguruar siç duhet

Së pari, do të dëshironi të siguroheni që depo juaj është e konfiguruar për të përdorur adresën e duhur të emailit dhe emrin e përdoruesit. Ju mund ta kontrolloni atë nga konfigurimi Git:

git config --list

Dhe vendosni emrin dhe emailin për këtë depo (ose duke përdorur --global për ta vendosur atë për të gjitha rezervat):

git config user.name "Name"
git config user.email "email@gmail.com"

Nëse nuk keni probleme kyçe SSH, kjo mund të jetë gjithçka që kërkohet.

Po redakton ~/.ssh/config

Nëse nuk keni një çelës ekzistues që dëshironi të përdorni tashmë, do t'ju duhet të krijoni një skedar të ri çelësi për llogarinë tuaj. Nëse e bëni këtë, do t'ju duhet ta zhvendosni ose riemërtoni atë të duhurin në ~/.ssh që të mos bie ndesh me id_rsa tuaj të paracaktuar. Në këtë rast, ne do të krijojmë një çelës të ri të quajtur github:

ssh-keygen -t rsa -f ~/.ssh/github

Për të përdorur çelësa të shumtë SSH, do t'ju duhet të redaktoni ~/.ssh/config dhe të konfiguroni një bllok të ri Host për Github që tregon skedarin kyç që sapo keni krijuar. SSH do ta përdorë këtë për të zgjedhur tastin SSH që do të përdorë.

Host main
  Hostname github.com
  IdentityFile ~/.ssh/github
  IdentitiesOnly yes

Host old
  Hostname github.com
  IdentityFile ~/.ssh/id_rsa
  IdentitiesOnly yes

Nëse keni vetëm një bllok pritës për çelësin e ri, nuk duhet të bëni asgjë tjetër dhe do të jeni në gjendje të lidheni me Github tani. Nëse keni shumë blloqe për çelësa të ndryshëm, do t'ju duhet të redaktoni telekomandën e depove në mënyrë që github.com të zëvendësohet me emrin e bllokut pritës në skedarin e konfigurimit të SSH. Kjo do të zgjedhë manualisht një çelës në vend që të mbështetet në një kërkim konfliktual.

git remote remove origin

git remote add origin git@main:username/repository.git

Zgjidhja e problemeve

Pas konfigurimit të konfigurimit të hostit SSH dhe konfigurimit të telekomandës, Git duhet të përdorë tastin e duhur SSH kur shtyn. Nëse keni ende probleme, mund ta korrigjoni problemin duke vendosur manualisht komandën SSH që Git përdor për një sesion shell duke përdorur ndryshoren e mjedisit GIT_SSH_COMMAND .

GIT_SSH_COMMAND='ssh -i ~/.ssh/github -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'

Do të dëshironi gjithashtu të kontrolloni dhe të siguroheni që Git po përdor çelësin nga vendi që prisni. Në Windows, ky vend mund të ndryshojë shumë në varësi të cilit softuer po përdorni Git. Për shembull, duke përdorur Fork-in e klientit GUI, ai u paracaktua në agjentin SSH të Windows, por unë kisha konfiguruar një çelës të ri SSH që ai po përdorte në vend të tij.