Git 每次都要求 SSH 密码,而 SSH 从代理那里获取

标签 git visual-studio ssh ssh-keys passphrase

我在 Windows 10 Pro 机器上尝试执行 git pull 而不必每次都输入我的 SSH 密码。 key 对已生成,带有密码,公钥已成功添加到我的 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 remote origin url 是描述格式的 SSH URL here ;它不是 HTTPS URL。 second-most-upvoted answeranother one further below在同一个问题上表明,一旦能够在没有密码的情况下执行 ssh 命令,git 命令也可以在没有密码的情况下工作,这不是我在这里观察到的。

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

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

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

最佳答案

首先关注these instructions (同时注明 here )将 GIT_SSH 环境变量设置为 C:\Windows\System32\OpenSSH\ssh.exe,这是解决方案的核心。

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

在新的控制台中,您应该能够在没有密码的情况下执行 git pushgit pull 等操作,并且用于同步的 GUI 选项也可以正常工作而不会出现错误。

关于Git 每次都要求 SSH 密码,而 SSH 从代理那里获取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70626342/

相关文章:

node.js - npm 安装错误 : "Host key verification failed."

Git - 文件 .idx 和 .pack 的取消链接失败(该文件的唯一进程拥有句柄是 git.exe)

.net - DataGridView.Column(ColumnName as String)给出错误 "Object reference not set to an instance of an object"

visual-studio - Visual Studio Publish 在 bin 目录上失败

wcf - netstat 说 443 已打开,但我无法使用 telnet 连接到它。为什么?

session - 如何在没有 screen 或 tmux 的情况下重新连接到意外断开的 ssh session

windows - Git 检测到实际字节相同的已更改文件

windows - GIT 克隆到外部驱动器进行备份

visual-studio - 扩展 SSRS 中的图表功能

ssh - 如何在独立环境中启动 apache-spark 从属实例?