Git 不使用 SSH 密钥 (Windows)

God*_*ebh 9 windows git ssh-keys pycharm gitlab

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

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

我也用过

>git remote set-url origin git@gitlab.lrz.de:000[...]/project.git
Run Code Online (Sandbox Code Playgroud)

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

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

Host gitlab.lrz.de
 HostName gitlab.lrz.de
 IdentityFile ~/.ssh/id_ed25519
Run Code Online (Sandbox Code Playgroud)

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

>git --version
git version 2.35.1.windows.1 
Run Code Online (Sandbox Code Playgroud)

Jac*_*_Hu 18

@kipy 几乎是正确的......

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

ssh-add <my-key>

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

这使事情变得更加复杂,因为像我一样,您将输入:

ssh -T git@github.com

看到“成功了!” 消息,然后挠头,想知道为什么git clone git@github.com:<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用此输出替换上面命令的最后部分。


kip*_*ipy 4

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

git config core.sshCommand "ssh -i ~/.ssh/id_ed25519"
Run Code Online (Sandbox Code Playgroud)