Tai galime pasiekti apsirašant kokius raktus kada naudoti ~/.ssh/config faile.
Pirmiausia, mums reikia įsitikinti, kad turime raktus savo kompiuteryje bei kodo versijavimo (toliau kaip pavyzdį naudosime tik Github, tačiau šis gidas tinka ir kitom git kodo versijavimo platformoms) svetainėje.
Jeigu neturime raktų, galime juos susikurti
# Asmeninis raktas
ssh-keygen -t ed25519 -C "your@personal.email" -f ~/.ssh/id_ed25519_personal
# Darbo raktas
ssh-keygen -t ed25519 -C "your@work.email" -f ~/.ssh/id_ed25519_work
Tai mums sukurs 4 failus ~/.ssh direktorijoje:
id_ed25519_personal(privatus raktas)id_ed25519_personal.pub(viešas raktas)id_ed25519_work(privatus raktas)id_ed25519_work.pub(viešas raktas)
Pridedame raktus į SSH agentą
Šis žingsnis nėra būtinas, jeigu kaip viršuje nenaudojamas passphrase.
ssh-add ~/.ssh/id_ed25519_personal
ssh-add ~/.ssh/id_ed25519_work
Įsitikiname, kad turime raktus savo paskyroje
Prisijungę į Github svetainės paskyrą, įsitikiname, kad ten turime šiuos raktus. Tiek asmeninėj, tiek darbo. Jeigu neturime, prisidedame.
Taigi, nusikopijuojame asmeninį viešą raktą.
# Nukopijuojame
pbcopy < ~/.ssh/id_ed25519_personal.pub
Tuomet einame į GitHub ir spaudžiame ant savo vartotojo ikonėlės (Open user navigation menu) → Settings → SSH and GPG keys → New SSH key ir įklijuojame.
Tą patį atliekame su darbo raktu (id_ed25519_work.pub) darbo GitHub paskyroje.
Susikonfigūruojame ~/.ssh/config failą
Jeigu neturime, susikuriame ~/.ssh/config failą (touch ~/.ssh/config). Jeigu turime, atnaujiname taip:
# Darbo paskyra (numatytoji)
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_work
IdentitiesOnly yes
# Asmeninė paskyra
Host personal.github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_personal
IdentitiesOnly yes
Kaip tai veikia?
SSH konfigūracija leidžia sukurti Host alias. Kai rašome personal.github.com, SSH žino, kad iš tikrųjų jungsis prie github.com (HostName), bet naudos asmeninį raktą (IdentityFile).
- Host — tai alias, kurį naudosime git komandose
- IdentitiesOnly yes — nurodo naudoti tik nurodytą raktą, ne visus iš SSH agento
Kaip klonuoti repozitorijas?
Dabar klonuojant reikia naudoti atitinkamą Host alias.
Jeigu iš Github, tai klonuojame adresą, kurį randame paspaudę Code → SSH
Darbo repozitorijai
Numatytąjai darbo repozitorijai naudojame jį ir nieko nekeičiame (naudojame įprastą github.com).
git clone git@github.com:work-user/work-project.git
Asmeninei repozitorijai
O klonuojant asmeninę repozitoriją, mums reikia pakeisti host į personal.github.com alias.
git clone git@personal.github.com:personal-user/personal-project.git
Kaip pakeisti jau esančios repozitorijos alias?
Jeigu jau turime nusiklonavę repozitoriją ir norime teisingai sukonfigūruoti SSH raktus, tada mums reikia pakeisti nuotolinį repozitorijos adresą.
Patikriname esamą nuotolinį adresą (URL).
git remote -v
Pakeičiame alias į asmeninį.
git remote set-url origin git@personal.github.com:personal-user/personal-project.git
Ar tikrai veikia?
Ar SSH raktų konfigūracija tikrai veikia, galime patikrinti taip:
# Tikrina asmeninę paskyrą
ssh -T git@personal.github.com
# Tikrina darbo paskyrą
ssh -T git@github.com
Jeigu matome kažką panašaus į šią žinutę, nadinasi veikia!
Hi AzisK! You’ve successfully authenticated, but GitHub does not provide shell access.
Voilà! Dabar mums nebereikės sukti galvos kur koks SSH raktas bus naudojamas, nes tai automatizavome!
Tačiau nepamirštame, kad SSH raktai tik autentifikuoja mus prie GitHub, bet commit autorystė nustatoma pagal git vartotojo vardą ir el. paštą. Kad commit’ai rodytų teisingą autorių, turime sukonfigūruoti ir šiuos nustatymus.
Kaip tai padaryti esu aprašęs šiame straipsnyje straipsnyje Kaip naudoti du skirtingus git vartotojus.
Šaltiniai
- GitHub Docs: Generating a new SSH key https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent