Hogyan kezelhet több GitHub-fiókot egyetlen gépen SSH-kulcsokkal

A legtöbb fejlesztő számára bizonyos időpontban felmerül annak szükségessége, hogy ugyanazon a gépen több GitHub-fiókot kezeljenek. Minden egyes alkalommal, amikor előfordul, hogy megváltoztatom a Mac-et, vagy ha új munkahelyi fiókkal kell Git-et nyomnom, végül szörfözöm azon, hogy hogyan kell csinálni valamit, amit fél tucatszor tettem meg.

Lustaságom, hogy nem dokumentáltam a folyamatot, és képtelen voltam megjegyezni a lépéseket, arra késztetett, hogy tisztességesen sok időt töltöttem az egész internetről a darabok megszerzésével, majd valahogyan működőképessé tételével.

Biztos vagyok benne, hogy sokan vagytok ott, akik ezt megcsinálták, és még sokan közületek, akik csak arra várnak, hogy legközelebb ugyanez történjen (én is!). Ez a törekvés mindannyiunk számára segítséget jelent.

1. Az SSH kulcsok előállítása

Az SSH-kulcs előállítása előtt ellenőrizhetjük, hogy vannak-e meglévő SSH-kulcsok: ls -al ~/.sshEz felsorolja az összes létező nyilvános és magánkulcs-párot, ha van ilyen.

Ha ~/.ssh/id_rsaelérhető, akkor újra felhasználhatjuk, különben előbb generálhatunk egy kulcsot az alapértelmezéshez ~/.ssh/id_rsaa futtatással:

ssh-keygen -t rsa

Amikor megkérdezi a kulcsok mentésének helyét, fogadja el az alapértelmezett helyet az enter megnyomásával. Privát és nyilvános kulcs ~/.ssh/id_rsa.pubjön létre az alapértelmezett ssh helyen ~/.ssh/.

Használjuk ezt az alapértelmezett kulcspárt a személyes fiókunkhoz.

A munkahelyi számlákhoz különböző SSH kulcsokat hozunk létre. Az alábbi kódot generál az SSH-kulcsokat, és elmenti a nyilvános kulcsot a tag [email protected]_mail.com” a~/.ssh/id_rsa_work_user1.pub

$ ssh-keygen -t rsa -C "[email protected]_mail.com" -f "id_rsa_work_user1" 

Két különböző kulcsot hoztunk létre:

~/.ssh/id_rsa ~/.ssh/id_rsa_work_user1

2. Adja hozzá az új SSH kulcsot a megfelelő GitHub-fiókhoz

Az SSH nyilvános kulcsai már készen állnak, és megkérjük a GitHub-fiókjainkat, hogy bízzanak az általunk létrehozott kulcsokban. Ennek célja, hogy megszabaduljon a felhasználónév és a jelszó begépelésének szükségességétől minden alkalommal, amikor Git-löketet hajt végre.

Másolja a nyilvános kulcsú pbcopy < ~/.ssh/id_rsa.kocsmát, majd jelentkezzen be a személyes GitHub-fiókjába:

  1. Menj Settings
  2. Válasszon SSH and GPG keysa bal oldali menüből.
  3. Kattintson a gombra New SSH key, adjon meg egy megfelelő címet, és illessze be a kulcsot az alábbi mezőbe
  4. Kattintson Add key- és kész!
A munkahelyi fiókokhoz használja a megfelelő nyilvános kulcsokat ( pbcopy < ~/.ssh/id_rsa_work_user1.kocsma), és ismételje meg a fenti lépéseket a GitHub munkahelyi fiókokban.

3. Az új SSH kulcsok regisztrálása az ssh-agentnél

A kulcsok használatához regisztrálnunk kell őket a gépünkön található ssh-agentnél . Győződjön meg arról, hogy az ssh-agent fut a paranccsal eval "$(ssh-agent -s)".

Ehhez adja hozzá a kulcsokat az ssh-agenthez:

ssh-add ~/.ssh/id_rsa ssh-add ~/.ssh/id_rsa_work_user1

Győződjön meg arról, hogy az ssh-agent a megfelelő SSH kulcsokat használja a különböző SSH-házigazdákhoz.

Ez a döntő rész, és kétféle megközelítésünk van:

Az SSH konfigurációs fájl használata (4. lépés), és egyszerre csak egy aktív SSH kulcs van az ssh-ügynökben (5. lépés).

4. Az SSH konfigurációs fájl létrehozása

Itt tulajdonképpen hozzáadjuk az SSH konfigurációs szabályait a különféle gazdagépekhez, és megadjuk, hogy melyik identitásfájlt melyik tartományhoz használjuk.

Az SSH konfigurációs fájl a ~ / .ssh / config címen lesz elérhető .Szerkessze, ha létezik, különben csak létrehozhatjuk.

$ cd ~/.ssh/ $ touch config // Creates the file if not exists $ code config // Opens the file in VS code, use any editor

Hajtson végre konfigurációs bejegyzéseket a megfelelő GitHub-fiókokhoz az alábbihoz hasonlóan ~/.ssh/config:

# Personal account, - the default config Host github.com HostName github.com User git IdentityFile ~/.ssh/id_rsa # Work account-1 Host github.com-work_user1 HostName github.com User git IdentityFile ~/.ssh/id_rsa_work_user1

A „ work_user1 ” a GitHub felhasználói azonosító a munkahelyi fiókhoz.

A „ g ithub.com- work_user1 ” a több Git-fiók megkülönböztetésére használt jelölés. Használhatja a „ work_user1.g ithub.com” jelölést is. Győződjön meg arról, hogy összhangban van-e a használt gépnév jelöléssel. Ez akkor releváns, amikor klónoz egy adattárat, vagy amikor egy távoli eredetet állít be egy helyi adattárhoz

A fenti konfiguráció arra kéri az ssh-agent-t, hogy:

  • Használja kulcsként az id_rsa szótmertbármely Git URL, amely a @ github.com címet használja
  • Használja az id_rsa_work_user1 kulcsot minden olyan Git URL-hez, amely @ github.com-work_user1

5. Egyszerre egy aktív SSH kulcs az ssh-agentben

Ez a megközelítés nem igényli az SSH konfigurációs szabályokat. Inkább manuálisan biztosítjuk, hogy az ssh-agent csak a megfelelő kulcsot csatolja bármely Git művelet idején.

ssh-add -lfelsorolja az ssh-agenthez csatolt összes SSH kulcsot. Távolítsa el az összeset, és adja hozzá azt az egy kulcsot, amelyet használni szeretne.

Ha egy személyes Git-fiókhoz kíván hozzáférni:

$ ssh-add -D //removes all ssh entries from the ssh-agent $ ssh-add ~/.ssh/id_rsa // Adds the relevant ssh key

Az ssh-agent most leképezte a kulcsot a személyes GitHub fiókkal, és megtehetjük a Git leküldését a személyes adattárhoz.

A munkahelyi GitHub fiók-1 eléréséhez módosítsa az ssh-ügynökhöz társított SSH-kulcsot a meglévő kulcs eltávolításával és a GitHub munkahelyi fiókkal leképezett SSH-kulcs hozzáadásával.

$ ssh-add -D $ ssh-add ~/.ssh/id_rsa_work_user1

The ssh-agent at present has the key mapped with the work Github account, and you can do a Git push to the work repository. This requires a bit of manual effort, though.

Setting the git remote Url for the local repositories

Once we have local Git repositories cloned /created, ensure the Git config user name and email is exactly what you want. GitHub identifies the author of any commit from the email id attached with the commit description.

To list the config name and email in the local Git directory, do git config user.name and git config user.email. If it’s not found, update accordingly.

git config user.name "User 1" // Updates git config user name git config user.email "[email protected]"

6. While Cloning Repositories

Note: step 7 will help, if we have the repository already available on local.

Now that the configurations are in place, we can go ahead and clone the corresponding repositories. On cloning, make a note that we use the host names that we used in the SSH config.

Repositories can be cloned using the clone command Git provides:

git clone [email protected]:personal_account_name/repo_name.git

The work repository will require a change to be made with this command:

git clone [email protected]_user1:work_user1/repo_name.git

This change is made depending on the host name defined in the SSH config. The string between @ and : should match what we have given in the SSH config file.

7. For Locally Existing Repositories

If we have the repository already cloned:

List the Git remote of the repository, git remote -v

Check whether the URL matches our GitHub host to be used, or else update the remote origin URL.

git remote set-url origin [email protected]_user1:worker_user1/repo_name.git

Ensure the string between @ and : matches the Host we have given in the SSH config.

If you are creating a new repository on local:

Initialize Git in the project folder git init.

Create the new repository in the GitHub account and then add it as the Git remote to the local repository.

git remote add origin [email protected]_user1:work_user1/repo_name.git 

Ensure the string between @ and : matches the Host we have given in the SSH config.

Push the initial commit to the GitHub repository:

git add . git commit -m "Initial commit" git push -u origin master

We are done!

Adding or updating the Git remote of the local Git directory with the proper host will take care of selecting the correct SSH key to verify our identity with GitHub. With all the above in place, our git operations should work seamlessly.