这可能不是重复;我已经阅读了StackOverflow上的许多类似问题,但没有读过这个问题。
我正在尝试在Ubuntu Linux上使用多个git帐户,每当我尝试从第二个帐户推送时,它认为我仍在使用第一个帐户的用户名。
$ git push -u origin master
ERROR: Permission to <act2>/<repo>.git denied to <act1>.
我首先尝试了多种SSH密钥方法。当我收到上述错误后,我在本地计算机上创建了一个全新的用户,以该用户身份登录,重新创建了本地仓库(它是第一次推送)并再次尝试。同样的错误。我的本地.config显示用户,我的〜/ .gitconfig也是如此。
有什么想法吗?
我这样做: ssh @localhost 然后是ssh -vvv -T git@github.com
我得到了这个有趣的输出。它似乎在我的帐户中找到了一个密钥。但不知何故,它在我的帐户中使用了一个密钥,实际上应该无法访问。
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
...
答案 0 :(得分:10)
这是因为ssh-agent缓存了ssh密钥(你甚至可以删除文件,它仍然允许ssh成功连接,直到缓存被清除),并且优先考虑缓存的密钥,甚至优先于通过IdentityFile指定的密钥。您可以通过运行来查看缓存了哪些文件:
ssh-add -l
您可以通过在每个连接的.ssh / config中包含IdentitiesOnly“yes”来强制ssh-agent忽略缓存:
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
我也花了很长时间才发现这一点,希望它有所帮助。
答案 1 :(得分:3)
为了说明我对这个答案的假设,它从问题标题中听起来好像你真正想做的是能够推送到GitHub被识别为不同的GitHub用户。
如果是这种情况,您不应该在系统上创建多个用户,只是为了通过SSH推送不同的GitHub用户。正确的方法是在github.com
中为~/.ssh/config
设置两个指定不同身份文件as described here的别名。例如,您的~/.ssh/config
可能包含以下内容:
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
然后,您可以将两个遥控器添加到您的存储库:
git add remote act1 git@github-act1:whoever/whatever.git
git add remote act2 git@github-act1:whoever/whatever.git
然后,如果您想作为一个用户推送,您可以这样做:
git push act1 master
......或作为第二个帐户:
git push act2 master
答案 2 :(得分:0)
查看.git文件夹及其内容的权限。使用ssh github.com -vvvv
确认将哪个SSH密钥传递给github。
答案 3 :(得分:0)
debug2: key:
debug2: key:
debug2: key: /home//.ssh/identity ((nil))
debug2: key: /home//.ssh/id_rsa ()
debug2: key: /home//.ssh/id_dsa ((nil))
看起来非常可疑。为什么您的主目录只是/home/
?如果多个用户拥有相同的主目录,那么我并不感到惊讶,ssh为两个用户找到了相同的密钥。检查
echo $HOME
以每个用户身份登录。他们应该指向不同的目录。