105

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

最近我开始在运行后收到“ PuTTY Fatal Error: Disconnected: No supported authentication methods available ”:

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

4

18 回答 18

107

您可以在主目录中创建一个名为“.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
于 2010-10-01T18:57:42.253 回答
41

使用 TortoiseGit

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

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

玳瑁

于 2015-08-03T14:44:40.630 回答
11

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

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

SSH

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

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

油灰

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

在 Windows 上,它是在 SSH 协议(上图)下远程访问 Linux 主机命令行的主要软件。在 Windows 中,.exe 扩展名用于可执行文件。因此,如果您使用的是 Linux,那么有关 plink.exe 和 pageant.exe 的说明可能并不适用。腻子包括

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 时导入所需的密钥。如果您遵循“导入您的密钥”的指南,并且看到它有效,但现在不起作用,请参阅第 9 章:使用 Pageant 进行身份验证

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

于 2015-03-13T15:21:27.507 回答
8

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

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

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

我更喜欢正常使用 git cmd.exe(当然在 Console2 中)

于 2011-10-11T13:14:45.170 回答
7

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

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

要加载密钥:

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

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

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

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

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

于 2016-06-15T14:51:01.820 回答
5

对于 Windows 上的 TortoiseGit 用户

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

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

但是 TortoiseGit 现在对 HTTPS 有更好的密码管理,而且Github 实际上建议尽可能使用 HTTPS URL。

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 倍
于 2016-06-20T08:32:30.123 回答
4

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

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

于 2013-11-05T17:15:01.037 回答
4

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

where ssh
于 2016-10-14T02:18:53.860 回答
3

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

我在 Windows 10 上使用 Git Bash

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

在此处输入图像描述

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

在此处输入图像描述

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

于 2019-09-23T11:19:59.260 回答
2

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

于 2013-07-18T03:18:14.610 回答
2

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

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

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

在此处输入图像描述

于 2019-12-24T11:27:15.313 回答
1

相同的错误,此处记录了不同的解决方案 -在 Windows 上连接到 GitHub 时出现问题,即使是通过 PuTTY

于 2011-02-17T19:07:20.913 回答
1

我遇到了同样的问题,但是 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 在这里解释的那样。

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

于 2014-10-15T01:01:33.120 回答
1

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

于 2015-07-14T12:09:18.367 回答
0

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

它们是 PuTTY 工具。

于 2010-08-18T03:24:21.827 回答
0

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

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

采用git remote -v

于 2017-02-27T22:35:35.813 回答
0

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

于 2021-06-17T10:49:02.507 回答
0

我刚刚通过将GIT_SSHenv var 设置为ssh. 就这3个字母。

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

我建议你为 Windows 安装 Git,然后把C:\Program Files\Git\usr\bin你的%PATH%

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

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

此答案与解决此问题有关: 连接到 Github 时“无法生成 ssh”,但 ssh -T git@github.com 有效?

于 2021-09-21T16:57:22.743 回答