当本地有多个Git帐户时,Git使用错误的用户名推送

lsmd5eda  于 2022-11-20  发布在  Git
关注(0)|答案(2)|浏览(165)

我使用三个不同的GitHub账户。
我已经正确地设置了ssh密钥(创建,添加到keyring,添加到github)。
执行ssh-add -l返回:

3072 SHA256:/Vq3tN5FxtE64LALAe25GQr+MpIPbGg mail@first.com (RSA)
3072 SHA256:9NheazRnzMzicLALA6z70kQeO6tQcNZcePJw0RRk mail@second.com (RSA)
3072 SHA256:r7uaTSfE9ZXn7LALAGHIn4syyaKPPyXsKdK8Sjk mail@third.com (RSA)

在我的**~/.ssh/.config**文件中,我有:

# GITHUB FIRST
Host github.com-first-user
  HostName github.com
  User git
  IdentityFile ~/.ssh/first-user

# GITHUB SECOND
Host github.com-second-user
  HostName github.com
  User git
  IdentityFile ~/.ssh/second-user
  
# GITHUB THIRD
Host github.com-third-user
  HostName github.com
  User git
  IdentityFile ~/.ssh/third-user

在我的全局git配置中,我没有添加任何用户/电子邮件配置。
每个存储库都包含正确的用户和电子邮件。
当我尝试推送时,它说first-user没有权限。

ERROR: Permission to user/repo.git denied to first-user.
fatal: Could not read from remote repository.

我相信在什么地方读到过git使用它看到的ssh键,所以可能它看到了第一个键并使用了它。
在repo文件夹中执行git config --list --show-origin --show-scope,我得到:

global  file:/home/user/.gitconfig    core.autocrlf=input
local   file:.git/config              user.name=Second
local   file:.git/config              user.email=mail@second.com

第一个用户没有任何设置。
执行git remote -v返回:

origin  git@github.com-second-user:user/repo.git (fetch)
origin  git@github.com-second-user:user/repo.git (push)

相关说明:

执行ssh -T github.com-second-user会传回 *Hifirst-user!,您已成功验证... *

注意:使用git cli和通过phpStorm UI使用git时都会发生此错误。

如何强制它为第二个用户使用第二个密钥?
谢谢你!

myss37ts

myss37ts1#

加:

IdentitiesOnly yes

如果没有这个设置,ssh * 首先 * 尝试 * 所有 * 代理提供的身份,* 然后 * 尝试列出的文件。由于第一个代理提供的实体作为第一个用户,所以你可以作为第一个用户进入GitHub:第二个用户的密钥不会被尝试,GitHub会认为您是第一个用户。
对于IdentitiesOnly yes,ssh只尝试列出的IdentityFile条目,按照它们出现的顺序(仍然根据需要从代理获取密钥,因此,如果计算机不是主系统,则只需将.pub文件存储在有问题的计算机上)。
Git 在这里做的任何事情都没有任何区别:所有这一切都完全取决于ssh和GitHub。)

u7up0aaq

u7up0aaq2#

要在一台机器上使用多个github帐户:遵循此
./ssh/config中的配置文件示例

Host user1
    HostName github.com
    IdentityFile ~/.ssh/privatekey-user1

Host user2
    HostName github.com
    IdentityFile ~/.ssh/privatekey-user2

user 1和user 2是用户名帐户github,例如:就像这里的manhcntt 21

每个存储库,您必须为每个帐户github设置名称和电子邮件

config --local user.name 
    config --local user.email

相关问题