Git不使用SSH密钥(Windows)

7

我为我的GitLab仓库创建了一个SSH密钥,当我使用SSH进行测试时,它可以工作并要求输入密码:

>ssh -T git@gitlab.lrz.de
Enter passphrase for key 'C:\Users\[username]/.ssh/id_ed25519':
Welcome to GitLab, @000[...]!

我也使用过

>git remote set-url origin git@gitlab.lrz.de:000[...]/project.git

没有错误。然而,当我试图提交并推送到存储库时,Git会要求git@gitlab.lrz.de的密码,而不是SSH密钥的密码。

根据文档(https://docs.gitlab.com/ee/ssh/),您可以在配置文件~/.ssh/config中设置SSH密钥。因此,我在该目录下创建了一个文本文件,并添加了以下内容:

Host gitlab.lrz.de
 HostName gitlab.lrz.de
 IdentityFile ~/.ssh/id_ed25519

它仍然无法正常工作,我不确定它是否使用了这个配置文件。我已经在Linux服务器上成功运行了所有内容,但在这台Windows电脑上却没有成功。我尝试过通过命令行和Pycharm来运行它。

>git --version
git version 2.35.1.windows.1 

我想尝试解释一下显然发生的事情:我有一个位于其通常位置(C:\Users\username)的主目录,在创建ssh密钥或使用ssh时,会使用此位置。但是,每个用户还在另一台服务器上拥有家目录,并且显然git将~解释为此目录(P:)。实际上,那里也有一个.ssh文件夹和一个配置文件。 - Godrebh
4个回答

8
@kipy几乎是正确的...
问题在于git将自己的SSH可执行文件捆绑在一起,而在Windows中(至少历史上如此),本机OpenSSH客户端是可选的,git默认不会承认它。因此,当你执行以下操作时:
ssh-add 在PowerShell(或其他地方),实际上并不是你的git命令使用的SSH客户端。
这进一步复杂化了事情,就像我一样,你会输入:
ssh -T git@github.com
看到"Success!"消息,然后摇头思考为什么git clone git@github.com:/.git会出现(public key)错误。我想线索很明显,但并不明显...一个是直接运行ssh,另一个是运行git,然后通过代理调用'ssh'。
解决这个问题的正确命令是告诉你的git安装(通过其配置)你想要使用哪个版本的SSH,所以:
git config --global core.sshCommand C:/Windows/System32/OpenSSH/ssh.exe 这样做将会使所有的git命令使用与你的ssh命令相同的SSH客户端。
这还允许你为不同的远程仓库使用不同的密钥,并且在所有终端/应用程序中都能正常工作。
注意:上述假设是通过Windows可选程序过程安装OpenSSH for Windows的,这很可能是正确的情况,但为了确保,您可以打开一个PowerShell窗口,并运行:
(Get-Command ssh).Path
这将输出类似以下内容:

C:\Windows\System32\OpenSSH\ssh.exe

如果没有输出这个,那么请将上面git config命令的最后一部分替换为这个输出。

这一点应该在 GitHub 文档中提到!!!这就是我在尝试通过代理使用我的密钥时遇到的问题,基本上 git clone 没有看到全局代理,因为它正在使用它的本地 ssh 副本,就像你提到的那样。完美的答案。 - undefined

4

你可以在git配置文件中自定义ssh命令,并在使用任何git命令时传递你的密钥。

git config core.sshCommand "ssh -i ~/.ssh/id_ed25519"

它并没有立即生效,但我收到了一个错误消息,这帮助了我!它说:“警告:身份文件/p//.ssh/id_ed25519不可访问:没有这样的文件或目录。”所以我使用了密钥文件的完整路径,然后用这个命令就可以了。谢谢! - Godrebh

2

当您在Windows上拥有一个或多个ssh密钥,用于推送到不同的Git存储库时:

c:\ Users \ anbj \。ssh \ config:

    Host github.com
        Hostname github.com
        User git
        IdentityFile /c/Users/anbj/.ssh/id_ed25519_client_A

    Host otherhub.com
        Hostname otherhub.com
        User git
        IdentityFile /c/Users/anbj/.ssh/id_ed25519_client_B

注意 不要写冒号(例如c:)。令人困惑的是,当运行测试时,这样做会起作用。

    ssh -vT github.com

...但是一旦你需要进行Git push,它就会失败,如下:

    git push -u origin develop

对我而言,使用 Git 2.36.0.windows.1 在 Windows 11 上,去掉冒号并使用绝对路径是可行的解决方法。


不确定如何使用/c/Users/....。我测试过/c/Users/user/.ssh/id_rsa~/.ssh/id_rsa。第一个不能工作,第二个可以工作。 - Akito

0
在PyCharm中,尝试导航到 VCS -> Git -> Remotes 并确保那里配置的URL与SSH URL对齐(通过浏览器导航到存储库并单击克隆按钮即可查看ssh URL)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接