我使用 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 似乎正确验证的事实让我想知道这里最好的解决方案是什么......如果不是,我当然不想让我的设置过于复杂必要的。
您可以在主目录中创建一个名为“.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
使用 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
“......不确定 plink.exe 或 peagant.exe 是什么......”
既然你问:plink & pageant 是 PuTTY 套件的一部分,它是支持 Linux 和 Windows 的 SSH 实现,在 Windows 上完全占主导地位。
Secure Shell (SSH) 是一种用于保护数据通信的加密网络协议。它在客户端-服务器架构中的不安全网络上建立安全通道,将 SSH 客户端应用程序与 SSH 服务器连接起来。常见的应用程序包括远程命令行登录、远程命令执行,但任何网络服务都可以使用 SSH 保护。
如果您曾经使用过 Telnet,它就是这样(但更安全):它允许您远程访问 Linux 主机的 bash shell(命令行)。
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 会安装它自己的。
我遇到了这个问题,因为我的 GIT_SSH
指向的是 TortoiseSVN 版本的 Plink.exe
。我将其更改为指向 TortoiseGit 版本,重新启动 cmd 并且它工作。
我记不清了,但 TortoiseSVN 版本可能是 32 位版本,而 TortoiseGit 版本是 64 位(位于 Program Files
,而不是 Program Files (x86)
)。
仔细检查您的 GIT_SSH
环境变量。
我更喜欢将 git 与普通 cmd.exe
一起使用(当然在 Console2 中)
如果您正在使用 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
对于 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 倍
我的问题是我试图使用我的 github 用户名。显然在使用 Github 时(或者它是 Git 的东西?),如果您使用基于密钥的身份验证,则需要将您的用户名设置为 git
。
我不确定你为什么甚至需要一个用户名——也许更有知识的人可以解释一下?
ssh://git@github.com/myname/repo.git
之类的东西效果很好。不错的作品。至于为什么,我认为是为了锁定安全性。 'git' 用户的登录被禁用,所以没有人可以通过这种方式闯入系统。他们必须有一个有效的密钥才能与 Github 交谈,一旦他们有一个有效的密钥,他们就可以将其与用户进行匹配以登录。
在 Windows 8 上为我工作:GIT_SSH 变量指向 plink.exe,在系统设置中将其更改为指向 ssh 二进制文件,这样就解决了问题。要找出 ssh 的完整路径,请运行:
where ssh
为了解决这个问题,这就是我所做的。
我在 Windows 10 上使用 Git Bash
我开始选美,按下添加键,
https://i.stack.imgur.com/5oKI0.png
导航到 C:\Users\username\.ssh 文件夹并选择我的密钥
https://i.stack.imgur.com/uMQ8D.png
然后我尝试做一个 git push ,这次它奏效了。
在我使用 git 版本 1.8.3.msysgit.0 运行 Github for Windows 的 Windows 7 机器上。我发现将我的系统环境变量 GIT_SSH 更新为 C:\Program Files (x86)\Git\bin\ssh.exe 似乎可以解决问题。这也解决了我联系 OpenShift 的 git repo 的问题。
将 GitExtensions 更新到版本 3.3.0.7719 后,我遇到了类似的问题
它以某种方式将我的身份验证设置恢复为使用 PuTTY 而不是 OpenSSH。
在那个版本中,这里是我用来再次启用 OpenSSH 的菜单:
https://i.stack.imgur.com/4dMIN.png
我刚刚通过将 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?
我遇到了同样的问题,但是 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。
我知道每个人都有不同的解决方案,但我将把它留在这里给任何可能遇到这篇文章但没有修复的人。祝你好运!
使用 TortoiseGit 从 GitHub 克隆存储库时出现此错误。通过单击“加载 Putty 密钥”并在 Git 克隆对话框中选择密钥文件 (*.pkk) 进行修复。
在 Windows 10 中,如果您进行了包括 Putty 在内的典型安装,上述解决方案均不适合我,我必须进入控制面板,特别是系统变量,将 GIT_SSH 更改为 D:\Program Files\Git\usr\bin \ssh.exe 那里(它链接到 plink.exe 并且没有修改 .profile 或任何说服它改变它的东西,只编辑系统变量)。
我遇到了这个问题(直接 ssh 有效,但 git pull 失败),因为我的 git remote 不是我想象的那样。
是的,是的,我知道这是一个愚蠢的错误,但它确实发生了,值得检查。
使用git remote -v
GIT_SSH
到.bash_profile
而不是.profile
GIT_SSH="D:\Program Files\Git\usr\bin\ssh.exe"