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.