目录

多个Github账号遇到的SSH权限问题

  • 因为开了两个github账号,需要两个SSH进行上传。在分别进行了SSH绑定之后。却一直显示permisson denied。接下来说下具体的坑和解决办法。

    问题描述

    我的Github账号有两,姑且这么叫

    • usera
    • userb

    usera是很久之前开的,userb是现在才开的。之前都用的usera,对应电脑上也是usera的SSH Key。这次git init之后,想传repo到userb上去。我给userb生成了SSH Key并上传到了对应账号,但Push时:

    1
    
    Permission to userb/blog.git denied to usera.
    

    根据这一篇的表述,说是不同账号要设置不同的ssh config。具体来讲,是在.ssh/config中写入:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    
    Host github.com-usera
        HostName github.com
        User usera
        PreferredAuthentications publickey
        IdentityFile ~/.ssh/usera_rsa
        IdentitiesOnly yes
    
    Host github.com-userb
        HostName github.com
        User userb
        PreferredAuthentications publickey
        IdentityFile ~/.ssh/userb_id_rsa
        IdentitiesOnly yes
    

    然后执行

    1
    2
    
    ssh-add ~/.ssh/usera_rsa
    ssh-add ~/.ssh/userb_rsa
    

    最后改相应repo下的config

    1
    2
    
    git config user.name "userb"
    git config user.email "userb@gmail.com"
    

    这么一大通操作后,我继续Push,又得到了

    1
    
    Permission to userb/blog.git denied to usera.
    

    我:???

    我怀疑是不是git config不对。执行了 git config --get [user.name]git config --get [user.email] 。返回的都是userb。我甚至改了全局的config,依然得到了

    1
    
    Permission to userb/blog.git denied to usera.
    

    ……

    我又执行了 git config -l 看看,发现username有两行。前面的一行值为usera,后面一行为userb。然后我查看git config -e ,又确实只有一行是我刚设置的。get user.name也返回userb 。

    然后我又查,stackoverflow上不少人遇到了这个问题。有人说,这是Xcode Cache的锅,自动存储了密码,去keychain里清除密码就好了。

    我按步骤清了密码的,又得到了

    1
    
    Permission to userb/blog.git denied to usera.
    

    很明显不是密码的问题。再说我都多久没用苹果自带的的钥匙串了,我快疯了,就没有一个方法可以让这个repo变成userb吗???

    终于,看到有人说,强行添加Remote orgin的账号有用,这么试了一下

    1
    
    git config -e
    

    强行加账号

    1
    
    remote="<https://userb@github.com/userb/blog.git>..."
    

    然后输入密码,然后终于push成功了!

    这个时候我又查看了一下git config

    1
    
    git config -l
    

    发现user.name只剩一行了。

    为什么SSH没有生效

    其实这是个非常低级的错误。因为我使用的远程仓库是http协议(https://github…),不是SSH协议(git@github.com)。当然改SSH是没有用的。

    使用http协议,在使用多个账户需要加上这个

    1
    
    git config --global credential.github.com.useHttpPath true
    

    即便是使用ssh协议,在执行上一节的步骤后,也还需要在git config -e里编译remoteURL,与ssh config中的Host值对应。

    1
    2
    3
    
    [remote "origin"]
    # url=git@github.com:userb/xxx.git
    url=git@github.com-userb:userb/xxx.git
    

    每次git clone之后都得记得要这么编辑一下,不然不知道会用哪个SSH Key……

    参考: