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


98

我使用github,过去已在笔记本电脑上成功添加和同步文件。

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

git pull origin master(或push)

然而

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

在github上挖掘后,我发现了这个问题:

没有可用的受支持的身份验证方法 您应该注意环境变量GIT_SSH,如果ssh不适用于git,它将被git使用来查找您的说ssh的客户端。git安装可能使用plink.exe(通过GIT_SSH)执行身份验证。如果是这样,请确保您正在运行pageant.exe,并将您为github创建的密钥加载到其中。这提供了plink.exe的密钥;没有它,将发生上述错误。

不知道什么是plink.exe或peagant.exe ..以及ssh git@github.com似乎可以正确验证的事实使我想知道这里的最佳解决方案是什么。.我当然不想过分复杂必要。

Answers:


101

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

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

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

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

启动Git Bash命令行时,将执行.profile脚本。

编辑:这是我的.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

8
+1我在使用Putty / Pageant来满足git的ssh需求时没有任何问题。使用内置的ssh客户端可以产生奇迹。这就解释了为什么ssh git@github.com如果您自己执行它会返回很好的结果,但是让git使用已配置的工具(Putty / Pageant)却不会。
enriquein

14
对我来说,那只是GIT_SSH =“ / bin / ssh.exe”(在Windows上)。谢谢!
Martin Konicek 2011年

1
@Justin您在使用mingw32提示符吗?
雷克斯·摩根

2
在Windows 7中使用cygwin,以上答案奏效,但我需GIT_SSH.bash_profile.profile
要这样做

2
就使用Git Bash的Windows 10而言,它是GIT_SSH="D:\Program Files\Git\usr\bin\ssh.exe"
PaulH

31

使用TortoiseGit

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

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

乌龟


5
谢谢。这工作。注意:您可能必须寻找“ ssh.exe”在给定计算机上的确切位置。对我而言,它是C:\ Program Files \ Git \ usr \ bin \ ssh.exe(可能是在过期的计算机上)
有害

10

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

如您所愿:plink和pageant是PuTTY套件的一部分,该套件是SSH的实现,支持Linux和Windows,并且在Windows上完全占主导地位。

SSH协议

安全外壳(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,则可能通过plink访问SSH会话,并且密钥可能由Pageant管理。

每次加载Pageant时,都需要导入所需的密钥。如果您遵循指示“导入您的密钥”的指南,并且看到它可以工作,但现在不起作用,请参阅第9章:使用Pageant进行身份验证

如果您使用的是Windows,最后一个技巧是:您可能通过各种工具安装了多个PuTTY套件实例。例如,TortoiseGit会自行安装。


8

我遇到了这个问题,因为我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的版本即可。
nitwit

6

对于Windows上的TortoiseGit用户

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

但是以这种方式设置TortoiseGit总是很痛苦。每次我花了几个小时来正确设置,因为默认安装选项似乎从未起作用(即使到2016年,该死!)。

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

SSH URL: 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'–
Mike

5

如果您正在使用Pageant,并且在重新启动PC(或关闭并重新打开Pageant)后出现问题中所述的错误,请执行以下操作:

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

加载密钥:

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

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

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

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

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


4

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

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


克隆私有存储库时,它是一个URL,例如git@github.com:username / Repository.git。我也不完全了解它背后的科学知识,但是git似乎是每个Github帐户的通用用户名

1
PLink / Pageant工作正常。这是实际的问题,使用类似的方法ssh://git@github.com/myname/repo.git会很好用。辛苦了 至于为什么,我认为这是为了锁定安全性。“ git”用户的登录名已禁用,因此没有人能以这种方式闯入系统。他们必须有,甚至聊到Github上一个有效的密钥,一旦他们有一个有效的密钥,他们可以匹配它的用户登录他们进来
ChokesMcGee

2

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


2

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

where ssh

2

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

我在Windows 10上使用Git Bash

我启动了Pageant,按了Add键,

在此处输入图片说明

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

在此处输入图片说明

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


请记住,您可能需要在每次重新启动Windows PC时执行此操作-您可以将Pageant作为快捷方式放入启动文件夹,并在私钥文件中使用正确的命令行参数,但是如果您在自己的计算机上设置了密码,私钥创建时,您需要记住右键单击工具托盘中的Pageant图标,选择“添加密钥”,并在每次重新启动后将其填写。
webbje


1

我遇到了同样的问题,但是GIT_SSH解决方案似乎一次对我有用。重新启动计算机后,我意识到这是另一回事,因为我可以使用Git Bash或命令提示符来毫无问题地克隆我的私有存储库,但不能在具有SublimeGit插件的Sublime Text 3中进行克隆。我的解决方案很简单,实际上是@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在这里解释的那样。

我知道每个人都有不同的解决方案,但是如果有任何人遇到本文而没有解决方法,我将在这里保留。祝好运!


1

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



0

我遇到了这个问题(直接ssh起作用,但是git pull失败了),原因是我的git remote不是我想的那样。

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

git remote -v


0

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

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

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

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.