7

This is probably not a dup; I have read through many similar problems on StackOverflow but not this issue.

I am trying to use multiple git accounts on Ubuntu Linux and whenever I try to push from the 2nd account it thinks that I am still using the username of the first account.

$ git push -u origin master
ERROR: Permission to <act2>/<repo>.git denied to <act1>.

I first tried the multiple SSH key method. When I got the above error I then created a completely new user on my local machine, logged in as that user, recreated the local repo (its the first push) and tried again. Same error. My local .config shows the user as and so does my ~/.gitconfig.

Any ideas?

I do: ssh @localhost then ssh -vvv -T git@github.com

I get this interesting output. It seems to go off and find a key in my account. But somehow it uses a key in my account, which is really shouldn't have access to.


debug1: Host 'github.com' is known and matches the RSA host key.
debug1: Found key in /home//.ssh/known_hosts:1
debug2: bits set: 513/1024
debug1: ssh_rsa_verify: signature correct
debug2: kex_derive_keys
debug2: set_newkeys: mode 1
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug3: Wrote 16 bytes for a total of 1015
debug2: set_newkeys: mode 0
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug3: Wrote 48 bytes for a total of 1063
debug2: service_accept: ssh-userauth
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug2: key:  
debug2: key:  
debug2: key: /home//.ssh/identity ((nil))
debug2: key: /home//.ssh/id_rsa ()
debug2: key: /home//.ssh/id_dsa ((nil))
debug3: Wrote 64 bytes for a total of 1127
debug1: Authentications that can continue: publickey
debug3: start over, passed a different list publickey
debug3: preferred gssapi-keyex,gssapi-with-mic,gssapi,publickey,keyboard-interactive,password
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Offering public key: 
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug3: Wrote 368 bytes for a total of 1495
debug1: Authentications that can continue: publickey
debug1: Offering public key: 
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug3: Wrote 368 bytes for a total of 1863
debug1: Remote: Forced command: gerve 
debug1: Remote: Port forwarding disabled.
debug1: Remote: X11 forwarding disabled.
debug1: Remote: Agent forwarding disabled.
debug1: Remote: Pty allocation disabled.
debug1: Server accepts key: pkalg ssh-rsa blen 277
debug2: input_userauth_pk_ok: fp 
debug3: sign_and_send_pubkey
debug3: Wrote 640 bytes for a total of 2503
debug1: Remote: Forced command: gerve 
debug1: Remote: Port forwarding disabled.
debug1: Remote: X11 forwarding disabled.
debug1: Remote: Agent forwarding disabled.
debug1: Remote: Pty allocation disabled.
debug1: Authentication succeeded (publickey).
debug1: channel 0: new [client-session]
debug3: ssh_session2_open: channel_new: 0
debug2: channel 0: send open
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
debug3: Wrote 128 bytes for a total of 2631
debug2: callback start
...
AndrewStone
  • 517
  • 4
  • 14
  • did the entire thing again in a VM (where act1 does not exist) and it worked...but that is definitely not ideal :-( – AndrewStone Oct 28 '11 at 04:36

4 Answers4

10

This happens because ssh-agent caches the ssh key (you can even remove the file and it will still allow ssh to connect successfully until the cache is cleared) and will prioritise the cached keys even over the ones specified via IdentityFile. You can see which files are cached by running:

ssh-add -l

You can force ssh-agent to ignore the cache by including IdentitiesOnly "yes" in the .ssh/config for each connection:

Host github
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_rsa
  IdentitiesOnly yes

Host github-work
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_dsa_work
  IdentitiesOnly yes

More information here: http://sealedabstract.com/code/github-ssh-with-multiple-identities-the-slightly-more-definitive-guide/

It took me quite a while to discover this too, hope it helps someone.

Phil Moorhouse
  • 850
  • 9
  • 22
3

To state my assumptions for this answer, it sounds from the question title as if what you really want to do is to be able to push to GitHub being identified as different GitHub users.

If that's the case, you shouldn't create multiple users on your system just in order to push as different GitHub users over SSH. The right way to do this is to set up two aliases for github.com in ~/.ssh/config that specify different identity files, as described here. For example, you might have in your ~/.ssh/config the following:

Host github-act1
  HostName github.com
  User git
  IdentityFile /home/whoever/.ssh/id_rsa.act1

Host github-act2
  HostName github.com
  User git
  IdentityFile /home/whoever/.ssh/id_dsa.act2

Then you can add two remotes to your repository:

git add remote act1 git@github-act1:whoever/whatever.git
git add remote act2 git@github-act1:whoever/whatever.git

Then if you want to push as one user you can do:

git push act1 master

... or as the second account:

git push act2 master
Mark Longair
  • 446,582
  • 72
  • 411
  • 327
  • yes I tried that method first. Same error. So then I went to the multiple unix accounts method, thinking that I had some ssh config problem... – AndrewStone Oct 28 '11 at 13:13
  • @AndrewStone: how are you logging in as the second user? What does `echo $HOME` show you once you've logged in as the second user? – Mark Longair Oct 28 '11 at 13:42
  • ssh @localhost. It shows /home/. Sorry for delay in responding 4 day power outage – AndrewStone Nov 02 '11 at 19:34
0

Take a look at the permissions to the .git folder and it's contents. Confirm which SSH key is being passed to github with ssh github.com -vvvv.

Adam Dymitruk
  • 124,556
  • 26
  • 146
  • 141
  • ssh git@github.com -vvvv says "Hi " (the wrong account) I'd digging thru all the output to see why – AndrewStone Oct 28 '11 at 04:09
  • for some reason the ssh is reaching over into my other user act and looking at it. It outputs: debug2: key: /home//.ssh/id_rsa and "remote: forced command: gerve " – AndrewStone Oct 28 '11 at 04:18
0
debug2: key:  
debug2: key:  
debug2: key: /home//.ssh/identity ((nil))
debug2: key: /home//.ssh/id_rsa ()
debug2: key: /home//.ssh/id_dsa ((nil))

That looks terribly suspicious. Why is your home directory just /home/? If more than one user has the same home directory, then I'm not surprised ssh finds the same key for both users. Check the results of

echo $HOME

while logged in as each user. They should point to different directories.

Greg Hewgill
  • 951,095
  • 183
  • 1,149
  • 1,285