ChatGPT解决这个技术问题 Extra ChatGPT

github:没有可用的受支持的身份验证方法

我使用 github 并且过去在我的笔记本电脑上成功添加和同步了文件。

最近我开始在运行后收到“PuTTY 致命错误:已断开连接:没有可用的支持的身份验证方法”:

git pull origin master(或推送)

然而

ssh git@github.com 返回正确的响应:错误:您好用户名!您已成功通过身份验证,但 GitHub 不提供 shell 访问 与 github.com 的连接已关闭。

在github上挖掘之后,我发现了这个morcel:

没有可用的受支持的身份验证方法 您应该知道环境变量 GIT_SSH,如果 ssh 不适合您,git 使用它来查找您的讲 ssh 的客户端。 git install 可能正在使用 plink.exe(通过 GIT_SSH)来执行身份验证。如果是这样,请确保您正在运行 pageant.exe,并且您为 github 创建的密钥已加载到其中。这提供了 plink.exe 的密钥;没有它,就会出现上述错误。

不知道 plink.exe 或 peagant.exe 是什么......而且 ssh git@github.com 似乎正确验证的事实让我想知道这里最好的解决方案是什么......如果不是,我当然不想让我的设置过于复杂必要的。


R
Rex Morgan

您可以在主目录中创建一个名为“.profile”的文件,对我来说是 C:\Users\[user]

在该文件中,放入以下代码行:

GIT_SSH="/usr/bin/ssh.exe"

这将设置 GIT_SSH 环境变量以使用 git 附带的 ssh 客户端。

.profile 脚本在您启动 Git Bash 命令行时执行。

编辑:这是我的 .profile。它会在您第一次启动 git 命令提示符时询问您的密码,然后会记住它,直到您重新启动计算机。非常方便,因此您不必每次想要做某事时都输入密码。

SSH_ENV="$HOME/.ssh/environment"
GIT_SSH="/usr/bin/ssh.exe"

function start_agent {
echo "Initializing new SSH agent..."
/usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
echo succeeded
chmod 600 "${SSH_ENV}"
. "${SSH_ENV}" > /dev/null
/usr/bin/ssh-add;
}

# Source SSH settings, if applicable
if [ -f "${SSH_ENV}" ]; then
. "${SSH_ENV}" > /dev/null
#ps ${SSH_AGENT_PID} doesn't work under cygwin
ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
start_agent;
}
else
start_agent;
fi

+1 在使用 Putty/Pageant 来满足 git 的 ssh 需求时,我什么都没有。使用内置的 ssh 客户端可以创造奇迹。这解释了为什么 ssh git@github.com 如果您自己执行它会返回正常,但让 git 使用配置的工具(Putty/Pageant)却不会。
对我来说,这只是 GIT_SSH="/bin/ssh.exe" (在 Windows 上)。谢谢!
@Justin 你在使用 mingw32 提示符吗?
在 Windows 7 中使用 cygwin,上述答案有效,但我需要 GIT_SSH.bash_profile 而不是 .profile
在我使用 Git Bash 的 Windows 10 的情况下,它是 GIT_SSH="D:\Program Files\Git\usr\bin\ssh.exe"
J
Joseph Dykstra

使用 TortoiseGit

TortoiseGit >设置 ... 网络 ... SSH 客户端:C:\Program Files\Git\usr\bin\ssh.exe

位置不同。在一台计算机上,它位于 C:\Program Files (x86)\Git\bin\ssh.exe

https://i.stack.imgur.com/hBxoh.png


谢谢。这行得通。注意:您可能必须四处寻找“ssh.exe”在给定机器上的确切位置。对我来说是 C:\Program Files\Git\usr\bin\ssh.exe (可能在过时的机器上)
C
Community

“......不确定 plink.exe 或 peagant.exe 是什么......”

既然你问:plink & pageant 是 PuTTY 套件的一部分,它是支持 Linux 和 Windows 的 SSH 实现,在 Windows 上完全占主导地位。

SSH

Secure Shell (SSH) 是一种用于保护数据通信的加密网络协议。它在客户端-服务器架构中的不安全网络上建立安全通道,将 SSH 客户端应用程序与 SSH 服务器连接起来。常见的应用程序包括远程命令行登录、远程命令执行,但任何网络服务都可以使用 SSH 保护。

如果您曾经使用过 Telnet,它就是这样(但更安全):它允许您远程访问 Linux 主机的 bash shell(命令行)。

PuTTY

PuTTY 是一个免费的开源终端仿真器、串行控制台和网络文件传输应用程序。它支持多种网络协议,包括 SCP、SSH、Telnet、rlogin ...

在 Windows 上,它是在 SSH 协议(上图)下远程访问 Linux 主机命令行的主要软件。在 Windows 中,.exe 扩展名用于可执行文件。所以那些关于 plink.exe & pageant.exe 可能是 don't apply if you're in Linux。腻子包括

Plink:PuTTY 后端的命令行界面 Pageant:PuTTY、PSCP 和 Plink 的 SSH 身份验证代理

来自 (http://en.wikipedia.org/wiki/Secure_Shell#Key_management)

当公钥存在于远程端并且匹配的私钥存在于本地端时,不再需要输入密码......为了额外的安全性,可以使用密码锁定私钥本身。

因此 github 托管在 Linux 机器上并使用 SSH 来保护连接。 SSH 使用密码或密钥进行身份验证,许多主机(github?)仅使用密钥进行身份验证。您的设置显然是在尝试使用密钥进行身份验证。密钥和主机不是一对一的:同一主机可以有两个密钥和/或同一密钥可以有两个主机,因此需要对其进行管理。如果您在 Windows 中,那么您的 SSH 会话可能通过 plink 访问,并且您的密钥可能由 Pageant 管理。

每次加载 Pageant 时导入所需的密钥。如果您按照“导入您的密钥”的指南进行操作,发现它有效,但现在不起作用,请参阅 Chapter 9: Using Pageant for authentication

如果您在 Windows 上,最后一个提示:您可能通过各种工具安装了多个 PuTTY 套件实例。例如,TortoiseGit 会安装它自己的。


v
vaughan

我遇到了这个问题,因为我的 GIT_SSH 指向的是 TortoiseSVN 版本的 Plink.exe。我将其更改为指向 TortoiseGit 版本,重新启动 cmd 并且它工作。

我记不清了,但 TortoiseSVN 版本可能是 32 位版本,而 TortoiseGit 版本是 64 位(位于 Program Files,而不是 Program Files (x86))。

仔细检查您的 GIT_SSH 环境变量。

我更喜欢将 git 与普通 cmd.exe 一起使用(当然在 Console2 中)


你没记错;我遇到了同样的问题,GIT_SSH 指向 TortoisePlink.exe 的 32 位 TortoiseSVN 版本。将它移到 TortoiseGit 的版本是可行的。
J
Jon Schneider

如果您正在使用 Pageant 并且在重新启动 PC(或以其他方式关闭并重新打开 Pageant)后遇到问题中描述的错误:

该错误可能是由于 Pageant 没有主动加载您的 GitHub SSH 密钥引起的。默认情况下,Pageant 在启动时不会自动加载上一个会话中的密钥。

要加载密钥:

打开选美。 (在 Windows 上,如果 Pageant 正在运行,它会在系统托盘中有一个图标。双击它。)单击 Add Key 按钮,然后继续添加现有的 GitHub SSH 密钥。

为避免以后出现此问题,您可以将 Pageant 配置为在启动时自动加载您的密钥。 (如果您的密钥受密码保护,选美会自动提示您输入密码。)

执行此操作的步骤(假设您已经将 Pageant 配置为在 Windows 启动时运行):

找到 Windows 启动时用于运行 Pageant 的快捷方式。 (它可能在 Startup 文件夹中,可以通过 Start > Run > shell:startup 打开)在快捷方式的 Properties 对话框中,将 SSH 密钥文件的完整路径和文件名附加到“Target”字段。

参考资料和完整详情:http://blog.shvetsov.com/2010/03/making-pageant-automatically-load-keys.html


S
Simon East

对于 Windows 上的 TortoiseGit 用户

最初,我曾经使用 SSH 存储库 URL 来设置我的大部分 Github/Bitbucket 存储库,因为(最初)它曾经是防止 TortoiseGit 在每个操作中提示您输入密码的唯一便捷方法。

但是以这种方式设置 TortoiseGit 总是令人毛骨悚然。每次我都需要几个小时才能正确设置,因为默认安装选项似乎从来没有工作过(即使到 2016 年,天哪!)。

但是 TortoiseGit 现在有更好的 HTTPS 密码管理,并且尽可能地Github actually recommends using HTTPS URLs

SSH URL:git@github.com:User/repo-name.git HTTPS URL:https://github.com/User/repo-name.git

HTTPS 的好处是:

无需管理或生成 SSH 密钥

无需让 pageant.exe 不断运行(每次启动时都会要求您输入密码)

使用来自澳大利亚的 TortoiseGit,我发现通过 HTTPS 进行的克隆比 SSH 快 5-10 倍


'git config --global http.sslVerify false'
B
BlueRaja - Danny Pflughoeft

我的问题是我试图使用我的 github 用户名。显然在使用 Github 时(或者它是 Git 的东西?),如果您使用基于密钥的身份验证,则需要将您的用户名设置为 git

我不确定你为什么甚至需要一个用户名——也许更有知识的人可以解释一下?


克隆私有存储库时,它是一个 URL,例如 git@github.com:username/Repository.git。我也不完全确定它背后的科学,但似乎 git 是每个 Github 帐户的通用用户名
PLink/Pageant 工作正常。这是实际问题,使用 ssh://git@github.com/myname/repo.git 之类的东西效果很好。不错的作品。至于为什么,我认为是为了锁定安全性。 'git' 用户的登录被禁用,所以没有人可以通过这种方式闯入系统。他们必须有一个有效的密钥才能与 Github 交谈,一旦他们有一个有效的密钥,他们就可以将其与用户进行匹配以登录。
D
Dmitriy

在 Windows 8 上为我工作:GIT_SSH 变量指向 plink.exe,在系统设置中将其更改为指向 ssh 二进制文件,这样就解决了问题。要找出 ssh 的完整路径,请运行:

where ssh

L
Lismore

为了解决这个问题,这就是我所做的。

我在 Windows 10 上使用 Git Bash

我开始选美,按下添加键,

https://i.stack.imgur.com/5oKI0.png

导航到 C:\Users\username\.ssh 文件夹并选择我的密钥

https://i.stack.imgur.com/uMQ8D.png

然后我尝试做一个 git push ,这次它奏效了。


请记住,您可能必须在每次重新启动 Windows PC 时执行此操作 - 您可能会将 Pageant 作为快捷方式放入您的启动文件夹中,并为您的私钥文件提供正确的命令行参数,但如果您在您的电脑上设置了密码创建私钥时,您需要记住右键单击工具托盘中的选美图标,选择“添加密钥”,并在每次重新启动后填写。
a
atorres757

在我使用 git 版本 1.8.3.msysgit.0 运行 Github for Windows 的 Windows 7 机器上。我发现将我的系统环境变量 GIT_SSH 更新为 C:\Program Files (x86)\Git\bin\ssh.exe 似乎可以解决问题。这也解决了我联系 OpenShift 的 git repo 的问题。


w
wip

将 GitExtensions 更新到版本 3.3.0.7719 后,我遇到了类似的问题

它以某种方式将我的身份验证设置恢复为使用 PuTTY 而不是 OpenSSH。

在那个版本中,这里是我用来再次启用 OpenSSH 的菜单:

https://i.stack.imgur.com/4dMIN.png


F
Fabien Haddadi

我刚刚通过将 GIT_SSH env var 设置为 ssh 解决了完全相同的问题。就这3个字母。

我强烈建议 Windows 10 用户将 GIT_SSH 设置为除了 ssh 字符串(无扩展名)之外的任何其他内容,以最大限度地提高 Windows 终端、git bash、cmd 甚至 PHP Storm 之间的交叉可操作性。显然,您的 %PATH% 必须有 ssh.exe

我建议您安装适用于 Windows 的 Git,然后将 C:\Program Files\Git\usr\bin 添加到您的 %PATH%

如果您曾经为 Windows 重新安装 Git,请准备好再次设置它,安装程序会要求您指定“plink”。它几乎不知道“ssh”会起作用。该安装程序无论如何都会拒绝绝对路径以外的任何其他内容。

我敢提醒您,在更改 GIT_SSH 值和/或路径后,您显然应该重新启动控制台或 IDE。

此答案与解决此问题有关:"Cannot spawn ssh" when connecting to Github, but ssh -T git@github.com works?


C
Community

相同的错误,此处指出了不同的解决方案 - Problem connecting to GitHub on Windows, even via PuTTY


C
Community

我遇到了同样的问题,但是 GIT_SSH 解决方案似乎对我有用一次。重新启动计算机后,我意识到这是另外一回事,因为我可以使用 Git Bash 或命令提示符毫无问题地克隆我的私人存储库,但在 Sublime Text 3 中使用 SublimeGit 插件却不行。我的解决方案很简单,实际上是 @BlueRaja - Danny Pflughoeft 提到的,但我认为它可以使用一些方向;)

基本上您只需要编辑 ~/.ssh/config 并确保用户名是 git。您还可以告诉它为 Github 使用特定的 SSH 密钥——我的 ~/.ssh/config 文件如下所示:

Host gh
    Hostname github.com
    User git
    IdentityFile ~/.ssh/github_rsa.pub

由于我一整天都在做许多其他事情,所以我有一个特定的 Github 密钥,但如果你只有一个,那么它通常会是 ~/.ssh/id_rsa.pubGithub explains here

我知道每个人都有不同的解决方案,但我将把它留在这里给任何可能遇到这篇文章但没有修复的人。祝你好运!


Z
Zymotik

使用 TortoiseGit 从 GitHub 克隆存储库时出现此错误。通过单击“加载 Putty 密钥”并在 Git 克隆对话框中选择密钥文件 (*.pkk) 进行修复。


S
Sprachprofi

在 Windows 10 中,如果您进行了包括 Putty 在内的典型安装,上述解决方案均不适合我,我必须进入控制面板,特别是系统变量,将 GIT_SSH 更改为 D:\Program Files\Git\usr\bin \ssh.exe 那里(它链接到 plink.exe 并且没有修改 .profile 或任何说服它改变它的东西,只编辑系统变量)。


这是唯一一个对我有用的方法,在煞费苦心地应用了所有其他更多投票的解决方案之后。
e
eabrand

你可以得到 plink &从这里选美:http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

它们是 PuTTY 工具。


c
cowlinator

我遇到了这个问题(直接 ssh 有效,但 git pull 失败),因为我的 git remote 不是我想象的那样。

是的,是的,我知道这是一个愚蠢的错误,但它确实发生了,值得检查。

使用git remote -v