Sådan administreres flere GitHub-konti på en enkelt maskine med SSH-nøgler

Behovet for at administrere flere GitHub-konti på den samme maskine kommer på et tidspunkt for de fleste udviklere. Hver eneste gang jeg tilfældigvis ændrer min Mac eller har brug for Git-push med en ny arbejdskonto, ender jeg med at surfe for, hvordan man gør noget, jeg har gjort over et halvt dusin gange.

Min dovenskab med ikke at dokumentere processen og manglende evne til at huske trinnene får mig til at bruge en anstændig tid på at få bit og pieces fra hele internettet og derefter på en eller anden måde få det til at fungere.

Jeg er sikker på, at der er mange af jer, der har været der, gjort det, og mange flere af jer, der bare venter på næste gang det samme sker (mig selv inkluderet!). Denne bestræbelse er beregnet til at hjælpe os alle ud.

1. Generering af SSH-nøgler

Før vi genererer en SSH-nøgle, kan vi kontrollere, om vi har nogen eksisterende SSH-nøgler: ls -al ~/.sshDette viser en liste over alle eksisterende offentlige og private nøglepar, hvis nogen.

Hvis det ~/.ssh/id_rsaer tilgængeligt, kan vi genbruge det, ellers kan vi først generere en nøgle til standard ~/.ssh/id_rsaved at køre:

ssh-keygen -t rsa

Når du bliver bedt om placeringen for at gemme tasterne, skal du acceptere standardplaceringen ved at trykke på enter. En privat nøgle og en offentlig nøgle ~/.ssh/id_rsa.puboprettes på standard ssh-placeringen ~/.ssh/.

Lad os bruge dette standardnøglepar til vores personlige konto.

For arbejdskontiene opretter vi forskellige SSH-nøgler. Nedenstående kode genererer SSH-nøglerne og gemmer den offentlige nøgle med tagget [email protected]_mail.com” til~/.ssh/id_rsa_work_user1.pub

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

Vi har oprettet to forskellige nøgler:

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

2. Tilføjelse af den nye SSH-nøgle til den tilsvarende GitHub-konto

Vi har allerede de offentlige SSH-nøgler klar, og vi vil bede vores GitHub-konti om at stole på de nøgler, vi har oprettet. Dette er for at slippe af med behovet for at indtaste brugernavnet og adgangskoden hver gang du laver et Git-tryk.

Kopier pbcopy < ~/.ssh/id_rsa.pubben med offentlig nøgle, og log derefter ind på din personlige GitHub-konto:

  1. Gå til Settings
  2. Vælg SSH and GPG keysfra menuen til venstre.
  3. Klik på New SSH key, angiv en passende titel, og indsæt nøglen i feltet nedenfor
  4. Klik Add key- og du er færdig!
For arbejdskontiene skal du bruge de tilsvarende offentlige nøgler ( pbcopy < ~/.ssh/id_rsa_work_user1.pub) og gentage ovenstående trin i dine GitHub-arbejdskonti.

3. Registrering af de nye SSH-nøgler med ssh-agent

For at bruge nøglerne skal vi registrere dem hos ssh-agenten på vores maskine. Sørg for, at ssh-agent kører ved hjælp af kommandoen eval "$(ssh-agent -s)".

Tilføj nøglerne til ssh-agenten som sådan:

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

Få ssh-agenten til at bruge de respektive SSH-nøgler til de forskellige SSH-værter.

Dette er den afgørende del, og vi har to forskellige tilgange:

Brug af SSH-konfigurationsfilen (trin 4) og kun med en aktiv SSH-nøgle i ssh-agenten ad gangen (trin 5).

4. Oprettelse af SSH-konfigurationsfilen

Her tilføjer vi faktisk SSH-konfigurationsreglerne for forskellige værter og angiver, hvilken identitetsfil der skal bruges til hvilket domæne.

SSH-konfigurationsfilen vil være tilgængelig på ~ / .ssh / config .Rediger det, hvis det findes, ellers kan vi bare oprette det.

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

Foretag konfigurationsposter for de relevante GitHub-konti svarende til nedenstående i din ~/.ssh/configfil:

# 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 ” er GitHub-bruger-id til arbejdskontoen.

G ithub.com- work_user1 ” er en notation, der bruges til at differentiere de forskellige Git-konti. Du kan også bruge “ work_user1.g ithub.com” notation. Sørg for, at du er i overensstemmelse med, hvilken værtsnavnnotation du bruger. Dette er relevant, når du kloner et lager, eller når du indstiller fjernoprindelsen til et lokalt lager

Ovenstående konfiguration beder ssh-agent om at:

  • Brug id_rsa som nøgletilenhver Git-URL, der bruger @ github.com
  • Use the id_rsa_work_user1 key for any Git URL that uses @github.com-work_user1

5. One active SSH key in the ssh-agent at a time

This approach doesn’t require the SSH config rules. Rather we manually ensure that the ssh-agent has only the relevant key attached at the time of any Git operation.

ssh-add -l will list all the SSH keys attached to the ssh-agent. Remove all of them and add the one key you are about to use.

If it’s to a personal Git account that you are about to push:

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

The ssh-agent now has the key mapped with the personal GitHub account, and we can do a Git push to the personal repository.

To push to your work GitHub account-1, change the SSH key mapped with the ssh-agent by removing the existing key and adding the SSH key mapped with the GitHub work account.

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

Initialiser Git i projektmappen git init.

Opret det nye lager i GitHub-kontoen, og tilføj det derefter som Git-fjernbetjeningen til det lokale lager.

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

Sørg for, at strengen mellem @ og: matcher den vært, vi har givet i SSH-konfigurationen.

Skub den første forpligtelse til GitHub-arkivet:

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

Vi er færdige!

Tilføjelse eller opdatering af Git-fjernbetjeningen til det lokale Git-bibliotek med den rette vært sørger for at vælge den korrekte SSH-nøgle for at bekræfte vores identitet med GitHub. Med alt det ovenstående på plads skal vores git operationsarbejde problemfrit.