微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Mingw-w64:ssh-add 工作直到 git fetch连接到代理时出错:文件描述符错误

如何解决Mingw-w64:ssh-add 工作直到 git fetch连接到代理时出错:文件描述符错误

我正在使用 windows/Git bash/MingW64,尝试自动添加 ssh 密钥以与 git 一起使用。 我遵循了这个 INavigationBase,只改变了我的私钥文件的路径。 它似乎有效 - 打开 git bash 时我得到“成功” 添加的身份:/c/users/..."。

ssh-add -l显示我的密钥添加正确,并且端口似乎已配置。

顺便说一句 - 此时 $SSH_AGENT_PID 匹配 ps 中的进程并且 $SSH_AUTH_PORT 似乎有效(/tmp/ssh-cEU4wbNe3vo4/agent.927 或类似)

但是当我进入我的 git repo 并运行 git fetch 时,我得到:

fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

在那之后,ssh-add 不再起作用,打印:

Error connecting to agent: Bad file descriptor

这很奇怪,因为 $SSH_AUTH_PORT$SSH_AGENT_PID 在这一点上没有改变,我已经尝试export对它们进行确认。

启动一个新的 SSH-AGENT 并添加我的密钥在同一个终端会话中起作用,但再次尝试 git fetch 将产生相同的效果

git 正在做什么会干扰 SSH 代理?

解决方法

经过长时间的搜索,我终于找到了。 Windows 更新破坏了我的设置?,特别是 Openssh。自上次 Windows 更新以来,我每次都必须输入密码,鉴于您的问题是最近才出现的,我怀疑您也是如此。

我认为 Win32-OpenSSH#1693 是相关的。

在我的 ~/.gitconfig 中的 [core] 中有一行(我不记得我之前遇到过什么问题)

   sshCommand = C:/Windows/System32/OpenSSH/ssh.exe

删除它会导致此错误

error: cannot spawn C:/Windows/System32/OpenSSH/ssh3.exe: No such file or directory
error: cannot spawn C:/Windows/System32/OpenSSH/ssh3.exe: No such file or directory
fatal: unable to fork

但是,将其替换为

    sshCommand = "C:/Program\\ Files/Git/usr/bin/ssh.exe"

一切都如我所愿。

我认为 Error connecting to agent: Bad file descriptor 意味着某些东西在幕后崩溃了,考虑到最近发生的事情,很可能是由于 Openssl 更新。

附言您可以通过检查 C:\Windows\System32\OpenSSH 中文件的“修改日期”来检查您的 OpenSSL 是否已更新。对我来说,这是最近发生的,与 ssh-agent 停止运行的那一刻一致。

,

在启动 git bash 和您的 SSH 命令之前,首先尝试简化您的 %PATH%。

在新的 CMD 中,用于测试:

set PATH=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\
set GH=C:\path\to\git
set PATH=%GH%\bin;%GH%\usr\bin;%GH%\mingw64\bin;%GH%\mingw64\libexec\git-core;%PATH%

确保您的环境变量没有定义 GIT_SSH(_xxx)
输入相同的 CMD(在启动 bash 之前)

set GIT

然后检查问题是否仍然存在。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。