多个用户已成功通过身份验证,但 SSH 密钥在 Windows 11 上不起作用

问题描述 投票:0回答:1

我正在尝试为我正在处理的多个项目设置多个 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 密钥之前,我登录和退出了两个帐户几次,所以我猜有些东西保存在某个地方,但我无法在任何地方找到它。有人知道去哪里看吗?

另外,我注意到在 github 上,它说密钥从未使用过: Screenshot github ssh key

我确实删除了 Windows 参考中的 git 用户,所以这不是问题。

git github ssh ssh-keys multiple-accounts
1个回答
0
投票

好的,这是我的解决方案。正如我已经提到的,当我测试

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 帐户中看到我的密钥正在被使用。

Screenshot github used key

© www.soinside.com 2019 - 2024. All rights reserved.