我为我的 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
@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
命令的最后部分。
您可以在 git config 中自定义 git 使用的 ssh 命令,然后在使用任何 git 命令时传递您的密钥。
git config core.sshCommand "ssh -i ~/.ssh/id_ed25519"
当您在 Windows 上有一个或多个 ssh 密钥时,用于推送到单独的 Git 存储库:
c:\用户nbj\.ss