(Git Bash)推送到Bitbucket时忽略SSH密钥

11

我在网上跟随一大堆博客找出了如何设置所有东西,现在我的情况如下:

首先,ssh -T git@bitbucket.org 返回以下结果:

conq: 登录为 myuser。
您可以使用git或hg连接到Bitbucket。 Shell访问被禁用。

这意味着我已经正确地设置了本地和bitbucket的ssh密钥,对吗?

我有一个~/.ssh/config文件,其中包含以下内容:

Host bitbucket.org
 IdentityFile ~/.ssh/id_rsa

当然,那个密钥是存在的。

然而,当我尝试运行命令(从另一个教程中获取)git push origin master时,会弹出一个窗口,显示:

---------------------------
PuTTY致命错误
---------------------------
断开连接:没有可用的身份验证方法(服务器发送:publickey)
---------------------------
确定   

5个回答

20
根据错误信息 PuTTY致命错误,看起来Git正在尝试使用PuTTY进行ssh身份验证。问题是PuTTY完全不知道您在~/.ssh中的设置。只有在使用与Git Bash捆绑的openssh时,~/.ssh中的设置才有意义。似乎您已将GIT_SSH环境变量设置为plink.exe,这是PuTTY的一部分工具。
您有两个选择:要么使用PuTTY和plink.exe进行ssh操作,要么使用Git Bash的openssh
如果您使用PuTTY,则需要使用pageant.exe管理您的ssh密钥,它也是PuTTY的一部分。这是一个非常好用的工具。运行它,在任务栏中应该会看到一个图标。右键单击该图标以添加您的私钥。使用PuTTY的另一个步骤是设置GIT_SSH,但看起来您已经完成了这项工作。在此设置中,git push将使用plink.exe,它作为PuTTY的一部分,将正确地找到由pageant.ext存储的私钥。
如果您想使用Git Bash的openssh,那么您需要做的就是摆脱GIT_SSH设置。确保在使用git push命令时,真正将该设置清空的一种方法是像这样运行命令:
GIT_SSH= git push origin master

今天早上我突然想到一个灵感;我记得错误实际上来自于putty,所以我重新安装了Git Bash,并配置了openssh而不是turtoise/putty plink等。这次它一下子就起作用了。问题是,我之前一直在运行pageagent,并且已经将.ssh密钥导入其中,但仍然无法工作。前一天晚上我花了整个晚上...处理ssh相关的事情时很容易失去时间的概念。 - Benny Bottema
3
对于那些正在使用PuTTY Pageant和plink的用户,下面的命令应该是等价的(假设plink在PATH中):plink -ssh git@bitbucket.org - icc97
1
当我使用GIT_SSH= git push origin master时,我遇到了致命错误。我错过了什么? - limeandcoconut

3

由于其他答案对我的同事没有帮助,我想到了以下方法:

由于像beanstalk这样的推送到远程仓库是成功的(https),即使使用git bash控制台也可以用ssh工作,我认为这一定与如何调用SSH有关。我们的远程环境类似于以下内容:

user@server:/path/to/repo.git

所以一个简单的which ssh命令给出了/bin/ssh

在我们刚添加的.bashrc配置文件中

export GIT_SSH=/bin/ssh.exe

然后就完成了。

更简单的解决方案是购买一台Mac!:)

祝您Git愉快


1
您真是个天才!我已经苦苦挣扎了几个小时,而您的一行代码却在一瞬间解决了问题。脱帽致敬 - Esben Andersen
你说得太对了,非常感谢你的回答。我为此苦苦挣扎了数小时。 - David H

1
尝试使用cmd.exe。在我的计算机上,Git Bash似乎存在环境变量问题。
在CMD中,使用echo %GIT_SSH%查看是否已设置(PuTTY / Plink执行此操作)。如果已设置,并且您想要使用openssh,请使用set GIT_SSH=清除它。
做完这些后,我可以在CMD中无问题地使用ssh进行推送和拉取,尽管Git Bash仍然无法正常工作。

1
您正在尝试通过SSH连接到Bitbucket,而不是通过Git进行连接,这就是第一个错误提示的意思。这种方式是不允许连接到Bitbucket的。
当您设置存储库时,如果您使用的是Bitbucket中现有的存储库,则只需要执行以下操作即可:
git clone git@bitbucket.org:/.git
您会收到有关接受密钥的消息,然后就可以开始使用了。
现在,如果您已经有了一个现有的存储库,您可以自己添加远程仓库,但是您需要将其添加到.git/config文件中。
您需要将url=git@bitbucket.org:/.git添加到[remote "origin"]部分中。

是的,我已经尝试过了,但它仍然不会使用SSH。原来是因为我安装了GIT来使用TurtoisePlink和puttygen.exe,而不是Git Bash提供的ssh客户端。 - Benny Bottema

0
对于那些遇到了这个(或类似)问题的人,我的解决方案是来自一个完全不同的StackOverflow问题的提示。
结果发现我使用的是HTTPS地址选项从Bitbucket克隆,而不是SSH。

enter image description here

显然,如果你在指向HTTPS地址的情况下运行git,它不会关心你是否有密钥。

  • 进入你的.git/config
  • 检查你的remote "origin"(或其他)url是否设置为https://...
  • 如果是这样,请转到Bitbucket repo,点击克隆按钮,从HTTPS切换到SSH,并复制以git@bitbucket...开头的地址
  • 就这样。

(在你测试它时,别忘了像我一样再次将你的密钥添加到代理中。)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接