我正在尝试为我正在处理的多个项目设置多个 GitHub 帐户。这根本行不通。
首先,我使用的是 Windows 11。
我已经创建了密钥,它们位于 C:/Users/User/.ssh/...
我在同一个 /.ssh 文件夹中创建了一个配置文件,这就是内容:
Host github-user1
HostName github.com
User git
IdentityFile ~/.ssh/github-user1
Host github-user2
HostName github.com
User git
IdentityFile C:\Users\User\.ssh\github-user2
注意,我尝试了两种指向关键文件的方法。我还尝试了“/c/Users/User/.ssh/”,这也不起作用。
我已将公钥添加到两个 github 帐户
我将密钥添加到 ssh 代理
我编辑了本地存储库 git 配置文件以使用正确的远程源和用户,它看起来像这样:
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
sshCommand = ssh -i ~/.ssh/github-user1
[user]
name = user1
email = [email protected]
[remote "origin"]
url = git@github-user1:user1/repositoryName.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
我像这样测试了身份验证:
ssh -T github-user1
这有效,两个存储库中的两个用户都已成功通过用户身份验证
我用“git config --list”检查了配置,这是输出:
diff.astextplain.textconv=astextplain
filter.lfs.clean=git-lfs clean -- %f
filter.lfs.smudge=git-lfs smudge -- %f
filter.lfs.process=git-lfs filter-process
filter.lfs.required=true
http.sslbackend=openssl
http.sslcainfo=C:/Program Files/Git/mingw64/etc/ssl/certs/ca-bundle.crt
core.autocrlf=true
core.fscache=true
core.symlinks=false
pull.rebase=false
credential.helper=manager
credential.https://dev.azure.com.usehttppath=true
init.defaultbranch=master
core.sshcommand=C:/Windows/System32/OpenSSH/ssh.exe
core.repositoryformatversion=0
core.filemode=false
core.bare=false
core.logallrefupdates=true
core.symlinks=false
core.ignorecase=true
core.sshcommand=ssh -i ~/.ssh/github-user1
user.name=user1
[email protected]
remote.origin.url=git@github-user1:user1/repositoryName.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master
对我来说看起来是正确的...
最后我测试了获取“git fetch”,这就是我得到的:
ssh: Could not resolve hostname github-user1: Name or service not known
fatal: Could not read from remote repository.
Please make sure you have the correct access rights and the repository exists.
这两个用户都会发生这种情况,并且都正确进行了身份验证。无论我尝试什么,这就是我得到的。
我最后尝试的是“ssh -vvv github-user1”来查看是否可以连接,确实可以。但是,这条规则出现在输出中:
debug1: Will attempt key: [email protected] RSA SHA256:blahblahblah agent
所以看起来它试图与错误的用户连接。另外,如果我提示这样做:
ssh -T [email protected]
出现同样的错误用户。那么,这是从哪里来的呢?我没有在任何地方配置这个。在我开始配置 ssh 密钥之前,我登录和退出了两个帐户几次,所以我猜有些东西保存在某个地方,但我无法在任何地方找到它。有人知道去哪里看吗?
我确实删除了 Windows 参考中的 git 用户,所以这不是问题。
好的,这是我的解决方案。正如我已经提到的,当我测试
ssh -T [email protected]
时,我验证了错误的用户。我没有将 [email protected] 定义为任何地方的主机。所以我决定将 user1 设置为默认的 github.com 主机,如下所示:
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/github-user1
Host github-user2
HostName github.com
User git
IdentityFile ~/.ssh/github-user2
本地存储库 git 配置文件现在如下所示:
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
sshCommand = ssh -i ~/.ssh/github-user1
[user]
name = user1
email = [email protected]
[remote "origin"]
url = [email protected]:user1/repositoryName.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
另外,我忘记在 user2 的本地存储库 git 配置文件中添加行
sshCommand = ssh -i ~/.ssh/github-user2
,所以我也添加了这一行。 user2 的配置现在如下所示:
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
sshCommand = ssh -i ~/.ssh/github-user2
[user]
name = user2
email = [email protected]
[remote "origin"]
url = git@github-user2:user2/repositoryName.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
这些步骤解决了我的问题。我现在可以从两个远程存储库上的 git 获取数据,并且可以在两个 github 帐户中看到我的密钥正在被使用。