每次Git都要求输入SSH密码短语,而SSH却可以从代理中获取。

6
我正在一台Windows 10 Pro机器上尝试进行git pull,而不必每次都输入我的SSH密码。密钥对已生成,并添加了公钥到我的GitLab帐户中。

在“服务”GUI中,我可以看到“OpenSSH身份验证代理”正在运行,在PowerShell中如果我执行Get-Service ssh-agent,我会看到以下信息,确认相同的信息:

Status   Name               DisplayName
------   ----               -----------
Running  ssh-agent          OpenSSH Authentication Agent

当我执行ssh -T git@gitlab.com时,我会收到“欢迎来到Gitlab”的消息,表示成功建立了ssh连接,而不需要输入密码。
我已经运行了ssh代理并添加了身份(通过运行svn add,输入我的密码并获得成功消息)。在同一终端中运行“ssh -T git@gitlab.com”成功,而不需要输入密码。
在终端中,我可以运行git命令(例如git pushgit pull),每次都会提示我输入密码,并且操作成功。
在Visual Studio Code中,当我点击GUI按钮与源代码库同步时,出现错误git@gitlab.com: Permission denied (publickey,keyboard-interactive). enter image description here
这很可能是因为它没有提示输入口令,但需要一个。当我点击“打开Git日志”或“显示命令输出”时,我可以看到尝试的命令。在VSCode中的终端或其他终端类型应用程序中运行完全相同的命令后,我会被提示输入口令,输入正确的口令后,操作成功。
git远程origin url是以此处描述的SSH URL格式;它不是HTTPS URL。同一问题的第二个最赞成的答案另一个更低的答案表明,一旦能够执行ssh命令而无需口令,git命令也可以无需口令运行,但这并不是我在这里观察到的情况。

我的~./ssh/config文件条目如下:

User git
Hostname gitlab.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/gitlab_id_ed25519
AddKeysToAgent yes

如何让Git使用存储在ssh-agent中的密码短语,而不是每次提示?

这个回答解决了你的问题吗?Git for Windows - 每次 push 都要求输入 SSH 密码 - Arty-chan
虽然该链接很有用,但出于下面回答中所述的原因,它并不适用。 - WBT
1个回答

4
首先,按照这些说明(也在这里注明)设置GIT_SSH环境变量为C:\Windows\System32\OpenSSH\ssh.exe,这是解决方案的核心。
然而,仅此还不足以解决观察到的问题。您需要重新启动Visual Studio以重新加载环境变量,但即使如此仍不足够,因为Powershell实例仍然没有$ENV:GIT_SSH。在具有“PROBLEMS”,“OUTPUT”,“TERMINAL”(选定)和“DEBUG CONSOLE”等标题的栏的右侧,单击加号旁边的向下箭头,选择Powershell,这将打开一个新的Powershell窗口,名称相同但图标不同:enter image description here或者只需单击加号,图标也将相同。无论哪种方式,在此新终端中,您可以键入$ENV:GIT_SSH并读取刚刚设置的值。您可以在旧终端中键入exit以避免意外使用它。
在新控制台中,您应该能够git pushgit pull等操作而无需输入口令,并且同步的GUI选项也将无误。

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