如何通过 Windows Git 凭据管理器使用多个 Git 帐户
Posted
技术标签:
【中文标题】如何通过 Windows Git 凭据管理器使用多个 Git 帐户【英文标题】:How to use multiple Git accounts with Windows Git Credentials Manager 【发布时间】:2022-01-15 17:40:55 【问题描述】:我已经设置了 git config 如下:
Host ACCOUNT1
HostName github.com
Port 22
User git-username1
IdentityFile ~/.ssh/id_rsa_2
Host ACCOUNT2
HostName github.com
Port 22
User git-username2
IdentityFile ~/.ssh/id_rsa
当我 git push ACCOUNT1 staging
失败并显示“Permission denied...(PublicKey)”
这是因为无论我如何重新排列主机(上面的 ACCOUNTS1 和 ACCOUNTS2),Windows 总是使用IdentityFile ~/.ssh/id_rsa
直到我将IdentityFile ~/.ssh/id_rsa_2
重命名为IdentityFile ~/.ssh/id_rsa
,然后git push ACCOUNT1 staging
工作......
所以每次我必须推送到一个帐户时,我都必须确保其私钥完全命名为“id_rsa”
有没有人有解决方案来确保 Windows 上的 git FOLLOW git config set IdentityFile 而不是完全落入“id_rsa”?
【问题讨论】:
您确实设置了配置的 ssh 部分,但您仍然需要配置 git 的远程配置以使用不同的 URL。请参阅git push
的手册页。
@A.H.我已将远程 url 设置为 git@gihtub.com:username/repo .... 这就是为什么当我更改密钥的命名以匹配 accounts1 和 accounts2 远程 URL 的 id_rsa 时它可以工作...
【参考方案1】:
我已将远程网址设置为
git@gihtub.com:username/repo
。
其实,如果你想要你的~/.ssh/config
条目,你需要将遥控器设置为:
git remote add ACCOUNT1 ACCOUNT1:username/repo
# or, if remote ACCOUNT1 already exists
git remote set-url ACCOUNT1 ACCOUNT1:username/repo
只有git push ACCOUNT1 staging
轻松工作。
如果没有名为 ACCOUNT1
的远程,git push 将使用 URL ACCOUNT1
,类似于 git@gihtub.com
,带有 id_rsa_2
,但是... 没有 username/repo
。
单独推送到git@gihtub.com
将始终是“权限被拒绝”。
~/.ssh/config
中的 User
条目应始终为:
User git
任何其他远程用户都将被“拒绝”。
【讨论】:
谢谢!您的解决方案仅在我进行如下编辑时才有效:将我的配置文件User ACCOUNT1
更改为 User git
。也许甚至删除那条线也会起作用
@CodeOneOnOne 好点。我已经编辑了答案以使其更清楚。【参考方案2】:
VonC already provided the short answer.这是长篇。
您混淆了 Git 的 凭据(与 http / https 一起使用)和 ssh 的 基于公钥/私钥的身份验证。特别是这些东西:
Host ACCOUNT1 HostName github.com Port 22 User git-username1 IdentityFile ~/.ssh/id_rsa_2
是一组 ssh 指令,您可以将其放入您的 .ssh/config
文件中。 Git 只是运行 ssh; ssh 然后做所有事情。
这些说明略有缺陷。特别是你想要User git
,而不是User git-username1
。这允许您在 ssh 请求中省略 git@
。 (如果包含git@
,则此处的User
行将被忽略,因此该缺陷变得不重要。)
要制作 ssh 使用这些指令,您必须将ssh 定向到名为ACCOUNT1
的伪0 主机:
ssh -Tv ACCOUNT1
例如,从命令行或ssh -Tv git@ACCOUNT1
。 SSH 将字符串文字 ACCOUNT1
与 Host
行匹配,然后在联系实际主机时使用剩余的指令 —HostName
、Port
、User
和 IdentityFile
。主机 ssh 联系人是HostName
部分中列出的联系人,即github.com
。使用的端口是 22(ssh 标准,因此无需列出)。示例中的用户名将是 git-username1
,这是错误的,因此您需要 git@ACCOUNT1
作为替代方法来覆盖用户名。
还缺少一行:IdentitiesOnly yes
。这不是必需,但有助于减少 ssh 在联系 github.com
时尝试的密钥数量。使用IdentitiesOnly yes
,IdentityFile
行中列出的每个键(您可以有多个)将按照列出的顺序进行尝试。顺序可能很重要,因为某些服务器可能会在前几个键之后悄悄地忽略键。 (想象一下你是守门人,看着人们上来在城堡门口的锁里试钥匙。有人——你看不到谁,因为光线太暗了——拿出一个巨大的钥匙圈,上面有 1000钥匙在上面,一一尝试。你觉得这个人怎么样?)
所以,我喜欢做的是:
Host gh1
HostName github.com
User git
IdentitiesOnly yes
IdentityFile ~/.ssh/id_github1
Host gh2
HostName github.com
User git
IdentitiesOnly yes
IdentityFile ~/.ssh/id_github2
等等。然后,在创建或更新 URL 时,我使用:
git clone ssh://gh1/user/repo.git
或:
git remote set-url origin ssh://gh2/user/repo.git
视情况而定。为了测试每个 ssh 设置,我使用:
ssh -T gh1
或:
ssh -Tvvv gh2
视情况而定。这里v
s 的数量决定了来自 ssh 的额外调试输出的数量:调试级别 1 的内容用一个 v
发出,调试级别 2 的东西用 2 个v
s 发出,依此类推。调试级别 1 足以监视正在测试的键。
【讨论】:
很好的答案:向您学习后,我所要做的就是将User ACCOUNT1
更改为User git
。和git remote set-url ACCOUNT1 ACCOUNT1:username/repo
根据你在下面@VonC 的回答以上是关于如何通过 Windows Git 凭据管理器使用多个 Git 帐户的主要内容,如果未能解决你的问题,请参考以下文章
git clone authentication failed问题
git clone authentication failed问题