Using multiple github accounts with ssh keys

Using multiple github accounts with ssh keys

Multiple GitHub Accounts

Source: https://gist.github.com/oanhnn/80a89405ab9023894df7

Problem

I have two Github accounts: oanhnn (personal) and superman (for work). I want to use both accounts on same computer (without typing password every time, when doing git push or pull).

Solution

Use ssh keys and define host aliases in ssh config file (each alias for an account).

How to?

  1. Generate ssh key pairs for accounts and add them to GitHub accounts.
  2. Edit/Create ssh config file (~/.ssh/config):
Copy
# Default github account: oanhnn
Host github.com
HostName github.com
IdentityFile ~/.ssh/oanhnn_private_key
IdentitiesOnly yes
      
# Other github account: superman
Host github-superman
HostName github.com
IdentityFile ~/.ssh/superman_private_key
IdentitiesOnly yes
  1. Add ssh private keys to your agent:
Copy
$ ssh-add ~/.ssh/oanhnn_private_key
$ ssh-add ~/.ssh/superman_private_key
  1. Test your connection
Copy
$ ssh -T [email protected]
$ ssh -T git@github-superman

With each command, you may see this kind of warning, type yes:

Copy
The authenticity of host 'github.com (192.30.252.1)' can't be established.
RSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:
Are you sure you want to continue connecting (yes/no)?

If everything is OK, you will see these messages:

Copy
Hi oanhnn! You've successfully authenticated, but GitHub does not provide shell access.
Copy
Hi superman! You've successfully authenticated, but GitHub does not provide shell access.
  1. Now all are set, just clone your repositories
Copy
$ git clone git@github-superman:org2/project2.git /path/to/project2
$ cd /path/to/project2
$ git config user.email "[email protected]"
$ git config user.name  "Super Man"

Done! Good luck!