Git 每次都会询问 SSH 密码,而 SSH 从代理获取密码

WBT*_*WBT 6 git ssh passphrase ssh-keys visual-studio

我在 Windows 10 Pro 机器上尝试执行 git pull,而不必每次都输入我的 SSH 密码。已生成带有密码的密钥对,并且公钥已成功添加到我的 GitLab 帐户。

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

Status   Name               DisplayName
------   ----               -----------
Running  ssh-agent          OpenSSH Authentication Agent
Run Code Online (Sandbox Code Playgroud)

当我这样做时,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). 在此输入图像描述
这可能是因为它没有提示输入密码,而需要输入密码。当我单击“打开 Git 日志”或“显示命令输出”时,我可以看到尝试的命令。在 VSCode 的终端或另一个终端类型应用程序中运行完全相同的命令,系统会提示我输入密码,输入正确的密码后,操作成功。

git Remote origin url 是此处描述的格式的 SSH URL ;它不是 HTTPS URL。第二高投票的答案下面关于同一问题的另一个答案表明,一旦能够在没有密码的情况下执行 ssh 命令,git 命令也可以在没有密码的情况下工作,而这不是我在这里观察到的。

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

User git
Hostname gitlab.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/gitlab_id_ed25519
AddKeysToAgent yes
Run Code Online (Sandbox Code Playgroud)

如何让 git 使用 ssh-agent 中存储的密码而不是每次都提示?

WBT*_*WBT 4

首先,按照这些说明(也请参见此处)将 GIT_SSH 环境变量设置为C:\Windows\System32\OpenSSH\ssh.exe,这是解决方案的核心。

然而,这还不足以解决所观察到的问题。您必须重新启动 Visual Studio 才能重新加载环境变量,但即使这样仍然不够,因为 Powershell 实例仍然没有$ENV:GIT_SSH. 在标题栏的右侧,标题为“问题”、“输出”、“终端”(选定)和“调试控制台”,单击加号旁边的向下箭头,然后选择 Powershell,这将打开一个新的 Powershell 窗口具有相同的名称但不同的图标: 在此输入图像描述 或者只需单击加号,它也会是相同的图标。无论哪种方式,在这个新终端中,您都可以键入$ENV:GIT_SSH并读取刚刚设置的值。您可以输入exit旧的,以避免意外使用它。

在新的控制台中,您应该能够在没有密码的情况下进行git push等等git pull,并且用于同步的 GUI 选项也将正常工作。