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

Posted

技术标签:

【中文标题】github:没有可用的受支持的身份验证方法【英文标题】:github: No supported authentication methods available 【发布时间】:2011-03-26 18:28:29 【问题描述】:

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

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

git pull origin master (or push)

然而

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 似乎正确验证的事实让我想知道这里最好的解决方案是什么......我当然不想让我的如果没有必要设置。

【问题讨论】:

【参考方案1】:

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

我强烈建议 Windows 10 用户将 GIT_SSH 设置为除 ssh 字符串以外的任何其他内容(无扩展名),以最大限度地提高 Windows 终端、git bash、cmd 甚至php 风暴。显然,您的%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?

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

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

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

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

【讨论】:

【参考方案4】:

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

我在 Windows 10 上使用 Git Bash

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

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

然后我尝试执行 git push,这次成功了。

【讨论】:

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

使用 TortoiseGit

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

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

【讨论】:

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

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

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

使用git remote -v

【讨论】:

【参考方案7】:

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

where ssh

【讨论】:

【参考方案8】:

适用于 Windows 上的 TortoiseGit 用户

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

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

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

SSH 网址:git@github.com:User/repo-name.git

HTTPS 网址:https://github.com/User/repo-name.git

HTTPS 的好处是:

不管理或生成 SSH 密钥 无需让pageant.exe 持续运行(每次启动时都会要求您输入密码) 使用来自澳大利亚的 TortoiseGit,我发现通过 HTTPS 进行的克隆比 SSH 快 5-10 倍

【讨论】:

+ 'git config --global http.sslVerify false'【参考方案9】:

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

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

要加载密钥:

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

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

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

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

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

【讨论】:

【参考方案10】:

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

【讨论】:

【参考方案11】:

"...不确定 plink.exe 或 peagant.exe 是什么..."

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

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 会自行安装。

【讨论】:

【参考方案12】:

我遇到了同样的问题,但是 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.pub,比如 Github explains here。

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

【讨论】:

【参考方案13】:

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

我不知道为什么你甚至需要一个用户名 - 也许更博学的人可以解释一下?

【讨论】:

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

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

【讨论】:

【参考方案15】:

我遇到这个问题是因为我的GIT_SSH 指向的是Plink.exe 的TortoiseSVN 版本。我把它改成指向 TortoiseGit 版本,重启 cmd 就可以了。

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

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

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

【讨论】:

你没记错;我遇到了同样的问题,GIT_SSH 指向 TortoisePlink.exe 的 32 位 TortoiseSVN 版本。将其移至 TortoiseGit 的版本是可行的。【参考方案16】:

同样的错误,这里提到了不同的解决方案 - Problem connecting to GitHub on Windows, even via PuTTY

【讨论】:

【参考方案17】:

你可以在你的主目录中创建一个名为“.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"【参考方案18】:

您可以从这里获得 plink & pageant:http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

它们是 PuTTY 工具。

【讨论】:

以上是关于github:没有可用的受支持的身份验证方法的主要内容,如果未能解决你的问题,请参考以下文章

断开连接 没有可用的受支持的身份验证方法(服务器发送公钥) 发送公钥 gssapi 密钥和麦克风

谷歌服务器腻子连接“断开连接:没有支持的身份验证方法可用(服务器发送:公钥)

任何可用插件都不支持身份验证方法“caching_sha2_password”

Laravel JWT 令牌在身份验证 JWT 方法中刷新后无效

谷歌云实例无法通过腻子连接 - 获取“不支持的身份验证方法可用(服务器发送:公钥)”

Kubernetes liveness 探针是不是支持使用 PKI 进行用户身份验证?