SSH потпис на Git commit-у није довољан — кључ мора и на GitHub

|Аутор: Уредништво QUASA|4 мин читања| 1
SSH потпис на Git commit-у није довољан — кључ мора и на GitHub

Да би GitHub приказао Verified уз SSH потписан commit, јавни кључ којим се потпис проверава мора бити додат вашем налогу као Signing. Према GitHub-овој документацији о провери потписа, за SSH проверу потребан је Git 2.34 или новији, а платформа пореди потпис с јавним кључем додатим налогу. Потписивање на рачунару зато само по себи не доноси ознаку.

Редослед је кратак: проверите верзију Git-а, подесите постојећи SSH кључ за потписивање, додајте његов јавни део на GitHub и направите потписан commit. За команду која потпис проверава локално потребан је још и allowed signers фајл. Тај фајл служи вашем Git-у; GitHub га не чита и не користи уместо кључа додатог налогу.

Проверите верзију и кључ који већ имате

У терминалу покрените git --version. Ако је приказана верзија старија од 2.34, ажурирајте Git пре подешавања SSH потписа. У наставку је као пример узет пар ~/.ssh/id_ed25519 и ~/.ssh/id_ed25519.pub; ако користите друго име, замените обе путање својима. Први фајл је приватни кључ, а фајл с наставком .pub његов јавни део.

Командом ls -l ~/.ssh/id_ed25519.pub проверите да ли јавни фајл постоји. Ако Git-у задајете путању до јавног кључа, приватни кључ мора бити доступан преко SSH агента: ssh-add -l приказује учитане кључеве, а ssh-add ~/.ssh/id_ed25519 учитава овај из примера када је потребно. Приватни кључ остаје на вашем рачунару. На GitHub ћете копирати искључиво садржај јавног фајла.

Подесите Git да потписује commit

Покрените git config --global gpg.format ssh, па git config --global user.signingkey ~/.ssh/id_ed25519.pub. Прва команда бира SSH формат потписа, а друга јавни кључ чији одговарајући приватни део користи агент. Поставке са --global важе за ваше репозиторијуме у оквиру корисничког налога; ако желите подешавање само за текући репозиторијум, покрените исте команде у њему без --global.

Проверите шта ће Git заиста употребити командама git config --get gpg.format и git config --get user.signingkey. То је нарочито корисно ако сте раније користили GPG или у појединачном репозиторијуму имате другачије локалне поставке. Када имате измену спремну за commit, употребите git commit -S -m "Опис измене". Опција -S потписује тај commit; за аутоматско потписивање будућих commit-а можете додати git config --global commit.gpgsign true.

Додајте јавни кључ на GitHub као Signing

На GitHub-у отворите Settings, затим SSH and GPG keys, па New SSH key. Изаберите тип Signing, налепите садржај фајла ~/.ssh/id_ed25519.pub у поље Key и сачувајте унос. GitHub-ово упутство за додавање SSH кључа разликује типове Authentication и Signing и наводи да исти јавни кључ треба додати засебно за обе намене ако га користите и за приступ репозиторијуму и за потписивање.

Зато успешан git push не доказује да ће потпис добити Verified. При приступу преко SSH-а проверава се кључ за аутентификацију, док се ознака уз commit односи на проверу његовог потписа. Ако је ваш јавни кључ већ приказан међу кључевима типа Authentication, додајте га поново као Signing. Ако сте већ пријављени у GitHub CLI, исти корак можете извести командом gh ssh-key add ~/.ssh/id_ed25519.pub --type signing.

Проверите потпис локално

За локалну проверу SSH потписа Git-у треба allowed signers фајл: сваки ред садржи идентификатор потписника и јавни кључ коме верујете. Документација за Git подешавања описује gpg.ssh.allowedSignersFile и наводи да git verify-commit неће успешно проверити такав потпис ако јавни кључ није у том фајлу. Ово је локална листа поверења, независна од листе кључева на GitHub налогу.

За свој кључ можете користити адресу из git config user.email као идентификатор. У POSIX љусци, команда printf '%s %s\n' "$(git config user.email)" "$(cat ~/.ssh/id_ed25519.pub)" >> "$HOME/.ssh/allowed_signers" додаје ред у фајл, под условом да су адреса и путања исправни. Затим покрените git config --global gpg.ssh.allowedSignersFile "$HOME/.ssh/allowed_signers" и git verify-commit HEAD. Успешан излаз значи да ваш Git може да провери потпис последњег commit-а помоћу кључа коме локално верује.

Фајл може садржати и друге потписнике ако желите да проверавате њихове commit-е, али за проверу сопственог потписа довољан је ваш исправан ред. Ако фајл већ постоји, команда са >> га допуњује, уместо да избрише претходне уносе. Погрешна путања у gpg.ssh.allowedSignersFile или изостављен кључ могу оборити локалну проверу иако је commit успешно потписан.

Када Verified и даље изостаје

Пошаљите потписан commit командом git push, отворите баш тај commit на GitHub-у и погледајте ознаку и њене детаље. Ако ознаке нема, најпре покрените git log -1 --show-signature и проверите да ли посматрате исти commit који сте послали. Ако commit нема потпис, направите наредни са -S или укључите commit.gpgsign за будуће commit-е; накнадна промена подешавања не потписује већ направљен commit.

Ако потпис постоји и git verify-commit HEAD успева, проверите да ли је исти јавни кључ са путање из user.signingkey додат вашем GitHub налогу управо као Signing. Ако локална провера не успева, прво проверите вредност коју враћа git config --get gpg.ssh.allowedSignersFile и ред с кључем у том фајлу. Те провере раздвајају проблем локалне листе поузданих потписника од проблема препознавања кључа на платформи.

Прочитајте и:

Подели:

Претплатите се на наш билтен

Добијајте најновије вести о Web3, AI-у и криптовалутама директно у пријемно сандуче.

0