I've seen some similar questions (in fact have tried the solution to every single one I've seen) but none have solved this. Essentially, I want to push to two different Github accounts without changing my config file every time.
I am trying to push to two different Github accounts from the same system, both with SSH. I am using WSL through VSCode. ssh -T
works for both of my RSA files, both Github accounts have the corresponding SSH keys and I can push to each just fine, when my .ssh/config
file has specific settings for each.
My .ssh/config
file looks like this:
# Personal Account
Host github.com-user1
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa
# Work Account
Host github.com-user2
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_user2
As is, pushing to account user1
works fine, but trying to push to account user2
gives error:
ERROR: Permission to user2/repo.git denied to user1.
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
HOWEVER, if I change the second stanza (#Work Account
)'s first line to just Host github.com
, I can suddenly push to account user2! I just... can't push to user1. I get the reverse of the above error, now Permission to user1/repo.git denied to user2.
I have tried:
Setting both as Host github.com
, but this reverts me to my original problem (can push only as user1.)
It seems like it's just picking the first stanza in the .ssh/config
file it sees (while prioritizing Host github.com
), but I need it to be responsive to which account I'm pushing from.
git config user.name
and user.email
are set to the correct values for each repo. User2 uses local config & User1 uses the global config, but I don't think this is the problem since I've been able to push to both without adjusting this.
I've added PreferredAuthentications publickey
and IdentitiesOnly yes
to both stanzas, and some others I've seen in others' configurations of this file, but none have changed the error that gets output.
Control Panel > Manage Windows Credentials
has no GitHub credentials associated with it (I checked, there weren't any, nothing has been altered/removed)
Once you've set up that stanza in your ~/.ssh/config
, you then need to change each remote name to use either github.com-user1
or github.com-user2
as the host name in the SSH URL. That's the only way to get this to work reliably, and you can change the existing remote (e.g. origin
) URL by running git remote set-url NEW-URL
.
Also note that you need the IdentitiesOnly yes
option in each stanza as well.
This is documented in the Git FAQ.