Git 不使用 SSH 密钥 (Windows)

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

我为我的 GitLab 存储库创建了一个 SSH 密钥,当我使用 SSH 测试它时,它确实有效并要求输入密码:

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

我也用过

>git remote set-url origin [email protected]:000[...]/project.git

没有错误。但是,当我尝试提交并推送到存储库时,Git 会要求输入

[email protected]
的密码,而不是 SSH 密钥的密码。

根据文档(https://docs.gitlab.com/ee/ssh/),您可以在配置文件中设置ssh密钥

~/.ssh/config
。所以我在这个目录中创建了一个包含以下内容的文本文件:

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

它仍然无法工作,我不确定它是否使用了这个配置文件。我能够在 Linux 服务器上运行所有内容,但不能在这台 Windows 计算机上运行。我通过命令行和 Pycharm 尝试过。

>git --version
git version 2.35.1.windows.1 
windows git pycharm gitlab ssh-keys
3个回答
22
投票

@kipy 几乎是正确的...

问题在于 git 捆绑了自己的 SSH 可执行文件,并且与 Windows 中一样(至少在历史上),本机 OpenSSH 客户端是可选的,默认情况下 git 不会承认它。因此,当您执行以下操作时:

ssh-add <my-key>

在 Powershell(或其他)中,这实际上并不是您的 git 命令正在使用的 SSH 客户端。

这让事情变得更加复杂,因为像我一样,你会输入:

ssh -T [email protected]

看到“成功了!”消息,然后挠头,想知道为什么

git clone [email protected]:<username>/<repo>.git
会给出
(public key)
错误。我想线索很清楚,但并不明显......在一个中直接运行
ssh
,在另一个中运行
git
,然后通过代理调用“ssh”。

解决此问题的正确命令是告诉您的 git 安装(通过其配置)您希望它使用哪个版本的 SSH,因此:

git config --global core.sshCommand C:/Windows/System32/OpenSSH/ssh.exe

然后,这将提示所有

git
命令使用与您的
ssh
命令相同的 SSH 客户端。

这还允许您对不同的遥控器使用不同的按键,以及在所有终端/应用程序中工作。


注意:上面假设 OpenSSH for Windows 是通过 Windows 可选程序进程安装的,这很可能是这种情况,但为了确定,您可以打开 PowerShell 窗口,然后运行:

(Get-Command ssh).Path

这将输出类似的内容:

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

如果没有输出,则用此输出替换上面

git config
命令的最后部分。


4
投票

您可以在 git config 中自定义 git 使用的 ssh 命令,然后在使用任何 git 命令时传递您的密钥。

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

3
投票

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

c:\用户nbj\.ss

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