This blog shows how one can use multiple Git accounts on one development machine. This would become handy if you are working on personal, work, or school projects on the same development machine. From the development machine, you can pull from and push to remote repositories of different Git accounts, and with the correct users. This blog shows two options but I usually use the first option. Note, the steps in this article may seem lengthy, but it’s critical for setting up your dev env.
Steps to Using SSH Keys
- On the Dev Machine, Generate a new SSH key for each Git Account
- Add SSH Key to each Git Account
- Create or Update Git Config File
- Add SSH Identity
- Set up Different Repos using Different SSH Identity
Step 1: Generate a new SSH key for each Git account.
For the latest info, see GitHub’s document generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent
You can do this by running the following command in your terminal:
Let’s use ssh-key
command to generate a public and private key pair, using
$ cd ~/.ssh
$ ssh-keygen -t ed25519 -C "your.email@gmail.com"
+----[SHA256]-----+
Then you should see the output:
Generating public/private ed25519 key pair.
Enter file in which to save the key (/Users/jchiang/.ssh/id_ed25519): id_ed25519_jesschiang_git
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in id_ed25519_jesschiang_git
Your public key has been saved in id_ed25519_jesschiang_git.pub
The key fingerprint is:
SHA256:n1CMnje7n3UKqw0eGa3N0TjKpUNSmtgzOrPIMh1Yqe0 your.email@gmail.com
The key's randomart image is:
+--[ED25519 256]--+
| |
| o |
| . . + |
| o + * . o |
| = . S = * . |
| o o . X & o |
| o .+ & + . .|
| o.E. + . * = o |
| oo . +o= . |
+----[SHA256]-----+
After running this command, there will be two files generated, id_ed25519_jess and id_ed25519_jess.pub
us147dda0fadf4:.ssh jchiang$ ls id_ed25519_jess id_ed25519_jess.pub known_hosts
Files:
- The id_ed25519_jess file contains a private key that should not be shared with anyone.
- The id_ed25519_jess.pub contains the public key, which content will be added to the GitHub site to form the trust relationship between the GitHub server and your machine.
Step 2 Add SSH public key to GitHub Account
Add each SSH key to the corresponding Git account. Follow the instructions for adding an SSH key to your Git account. Follow this doc for instructions: adding-a-new-ssh-key-to-your-github-account
Go to Git page At your Git Account page, select the Git Profile icon, and select “Settings” at the drop-down
Follow the instructions to add a new SSH key and select the authentication
Copy and paste id_ed25519_jess content to the New Key content edit field Save the new SSH key
If you have multiple organizations, make sure you select the one to grant access to
Step 3: Step 3: Create or Update the ssh config file
Create a ~/.ssh/config
file in your home directory and add the following content.
You can leave the user name as git.
# Personal Account
Host github-personal
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_jess
# Work Account
Host github-work
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_work
Step 4: Add each SSH Key to the SSH Identity List
The block below shows the steps to clear the cache and add the SSH keys
# check your saved keys
$ ssh-add -l
# add each new key
$ ssh-add ~/.ssh/id_ed25519_jess
$ ssh-add ~/.ssh/id_ed25519_work
Step 5: Set up Local Git Repos w/ Diff IdentitiesClone your Git repository using the appropriate Host value in the Git repository URL. For example:
Step 5: Verify
Clone the remote repos using two different identities. Please update your commands with the actual user name and repo name. In the example below, the username for the personal git account is jessicachiang
, and the personal repo is helloworld.git
.
# Personal account
$ git clone git@github-personal:<username>/<repo-name>.git
$ git clone git@github-personal:jessicachiang/helloworld.git
# Work account
$ git clone git@github-work:<work-username>/<work-repo-name>.git
$ git clone git@github-personal:jessicachiang_work/helloworld_work.git
Before testing the Git Push, if your repo is a brand new one, make sure to add the remote origin
$ git remote add origin git@github-personal:jessicachiang/hello-react.git
$ git remote -v
origin git@github-personal:jessicachiang/hello-react.git (fetch)
origin git@github-personal:jessicachiang/hello-react.git (push)