Kako upravljati s više GitHub računa na jednom stroju s SSH ključevima

Potreba za upravljanjem više računa GitHub na istom stroju javlja se u određenom trenutku za većinu programera. Svaki put kad mi se dogodi da promijenim svoj Mac ili treba Git push s novim radnim računom, na kraju surfam kako potražiti nešto što sam učinio više od pola tuceta puta.

Zbog moje lijenosti što nisam dokumentirao postupak i nemogućnosti pamćenja koraka proveo sam pristojno vrijeme uzimajući dijelove i dijelove sa cijele mreže, a zatim nekako tjerajući to da funkcionira.

Siguran sam da postoji mnogo vas koji ste bili tamo, učinili to i još puno vas koji samo čekate sljedeći put kad se dogodi ista stvar (uključujući i mene!). Ovaj pothvat trebao bi nam svima pomoći.

1. Generiranje SSH ključeva

Prije generiranja SSH ključa možemo provjeriti imamo li postojeće SSH ključeve: ls -al ~/.sshOvo će navesti sve postojeće parove javnih i privatnih ključeva, ako ih ima.

Ako ~/.ssh/id_rsaje dostupan, možemo ga ponovno upotrijebiti, ili pak prvo generirati ključ zadanog ~/.ssh/id_rsapokretanjem:

ssh-keygen -t rsa

Kada se zatraži mjesto za spremanje ključeva, prihvatite zadani položaj pritiskom na enter. Na ~/.ssh/id_rsa.pubzadanom ssh mjestu stvorit će se privatni i javni ključ ~/.ssh/.

Upotrijebimo ovaj zadani par ključeva za svoj osobni račun.

Za radne račune stvorit ćemo različite SSH ključeve. Kôd u nastavku generirat će SSH ključeve i spremit će javni ključ s oznakom "email@work_mail.com" na~/.ssh/id_rsa_work_user1.pub

$ ssh-keygen -t rsa -C "email@work_mail.com" -f "id_rsa_work_user1" 

Izradili smo dva različita ključa:

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

2. Dodavanje novog SSH ključa na odgovarajući GitHub račun

Već imamo spremne SSH javne ključeve i zamolit ćemo naše GitHub račune da vjeruju ključevima koje smo stvorili. Ovim ćete se riješiti potrebe za upisivanjem korisničkog imena i lozinke svaki put kada pritisnete Git.

Kopirajte pbcopy < ~/.ssh/id_rsa.pub s javnim ključem, a zatim se prijavite na svoj osobni GitHub račun:

  1. Ići Settings
  2. Odaberite SSH and GPG keyss izbornika slijeva.
  3. Kliknite New SSH key, navedite prikladan naslov i zalijepite ključ u donji okvir
  4. Kliknite Add key- i gotovi ste!
Za radne račune upotrijebite odgovarajuće javne ključeve ( pbcopy < ~/.ssh/id_rsa_work_user1.pub) i ponovite gornje korake na svojim GitHub radnim računima.

3. Registriranje novih SSH ključeva ssh-agentom

Da bismo koristili ključeve, moramo ih registrirati kod ssh-agenta na našem stroju. Provjerite je li ssh-agent pokrenut pomoću naredbe eval "$(ssh-agent -s)".

Dodajte ključeve ssh-agentu tako:

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

Neka ssh-agent koristi odgovarajuće SSH ključeve za različite SSH hostove.

Ovo je presudan dio i imamo dva različita pristupa:

Korištenje SSH konfiguracijske datoteke (korak 4) i istovremeno imati samo jedan aktivni SSH ključ u ssh-agentu (korak 5).

4. Stvaranje konfiguracijske datoteke SSH

Ovdje zapravo dodajemo pravila konfiguracije SSH za različite hostove, navodeći koju datoteku identiteta koristiti za koju domenu.

Datoteka SSH konfiguracije bit će dostupna na ~ / .ssh / config .Uredite ga ako postoji, ili ga inače možemo samo stvoriti.

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

Unesite konfiguracijske unose za relevantne GitHub račune slične onome dolje u vašoj ~/.ssh/configdatoteci:

# 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

" Work_user1 " je GitHub korisnički ID za radni račun.

" G ithub.com- work_user1 " oznaka je koja se koristi za razlikovanje više Git računa. Također možete upotrijebiti i oznakuwork_user1.g ithub.com” . Provjerite jeste li u skladu s oznakom imena hosta koju koristite. To je relevantno kada klonirate spremište ili kada postavljate udaljeno podrijetlo za lokalno spremište

Gornja konfiguracija traži od ssh-agenta:

  • Koristite id_rsa kao ključzabilo koji Git URL koji koristi @ github.com
  • Upotrijebite ključ id_rsa_work_user1 za bilo koji Git URL koji koristi @ github.com-work_user1

5. Istodobno jedan aktivni SSH ključ u ssh-agentu

Ovaj pristup ne zahtijeva pravila konfiguracije SSH. Umjesto da ručno osiguravamo da ssh-agent ima priložen samo odgovarajući ključ u vrijeme bilo koje Git operacije.

ssh-add -lpopisat će sve SSH ključeve priključene na ssh-agent. Uklonite ih sve i dodajte jedan ključ koji ćete koristiti.

Ako se radi o osobnom Git računu koji ćete gurnuti:

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

Ssh-agent sada ima ključ mapiran s osobnim GitHub računom, a mi možemo izvršiti Git potiskivanje u osobno spremište.

Da biste gurnuli na svoj radni GitHub račun-1, promijenite SSH ključ preslikan ssh-agentom uklanjanjem postojećeg ključa i dodavanjem SSH ključa preslikanog s GitHub radnim računom.

$ 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.