(git bash) 推送到 bitbucket 忽略 SSH 密钥

Posted

技术标签:

【中文标题】(git bash) 推送到 bitbucket 忽略 SSH 密钥【英文标题】:(git bash) push to bitbucket ignores SSH key 【发布时间】:2013-06-22 19:54:53 【问题描述】:

我在网络上跟踪了一堆博客路径,以了解应该如何设置所有内容,我遇到了以下情况:

首先ssh -T git@bitbucket.org返回如下结果

conq:以 myuser 身份登录。 您可以使用 git 或 hg 连接到 Bitbucket。外壳访问被禁用。

这意味着我在本地和 bitbucket 中都正确设置了 ssh 密钥,同意吗?

我有一个~/.ssh/config,内容如下:

托管 bitbucket.org 身份文件 ~/.ssh/id_rsa

那把钥匙当然在那里。

但是,当我尝试命令(取自另一个教程)git push origin master 时,我会得到一个弹出窗口:

-------------------------- 腻子致命错误 -------------------------- 断开连接:没有可用的受支持的身份验证方法(服务器发送:公钥) -------------------------- 好的

【问题讨论】:

【参考方案1】:

从错误PuTTY Fatal Error 来看,Git 似乎正在尝试使用 PuTTY 来通过 ssh 进行身份验证。问题是 PuTTY 根本不知道您在 ~/.ssh 中的设置。 ~/.ssh 中的设置仅在使用 Git Bash 附带的 openssh 时才有意义。看起来您已将 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

【讨论】:

正确!今天早上我醒来时顿悟了;记住错误实际上来自腻子,这次我重新安装了 Git Bash,配置了 openssh 而不是 turtoise/putty plink 等,它立即工作。问题是,我运行了 pageagent 并在那里导入了 .ssh 密钥,但它仍然无法正常工作。前一天花了我整个晚上......在处理与 ssh 相关的事情时很容易忘记时间。 对于那些使用 plink 的 PuTTY 选美比赛的人,那么以下命令应该是等效的(假设 plink 在 PATH 中)plink -ssh git@bitbucket.org 使用GIT_SSH= git push origin master 时出现致命错误。我在这里错过了什么?【参考方案2】:

在我的一位同事的所有其他答案都没有做到这一点之后,我想到了以下几点:

由于推送到像 beanstalk 这样的遥控器可以工作 (https),​​甚至 ssh 也可以使用 git bash 控制台工作,我认为它一定与 SSH 的调用方式有关,我们的遥控器是这样的:

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

所以一个简单的which ssh 给了我们/bin/ssh

在我们刚刚添加的.bashrc 个人资料中

export GIT_SSH=/bin/ssh.exe

瞧瞧。

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

祝你好运

【讨论】:

您先生 - 真是个天才!我已经挣扎了好几个小时,而你的单线在一秒钟内就把它修好了。 提示 Fedora 您说的太对了,非常感谢您的回答。我挣扎了好几个小时【参考方案3】:

您正在尝试通过 SSH 而不是通过 Git 连接到 Bitbucket,这是第一个错误告诉您的。不允许您以这种方式连接到 Bitbucket。

当您设置您的存储库时,如果您不在 Bitbucket 中的现有存储库中,您需要做的就是:

git clone git@bitbucket.org:<UserName>/<Name of the Repo>.git

您会收到一条关于接受密钥的消息,并且一切就绪。

现在,如果您有一个已经存在的 repo,您​​可以自己添加遥控器,但您可以将其添加到 .git/config

您可以将url=git@bitbucket.org:<UserName>/<Name of the Repo>.git 添加到[remote "origin"] 部分。

【讨论】:

是的,我已经有了,但它仍然不会使用 SSH。原来是因为我安装了 GIT 来使用 TurtoisePlink 和 puttygen.exe,而不是 Git Bash 提供的 ssh 客户端。【参考方案4】:

尝试使用 cmd.exe。 Git Bash 似乎在我的机器上存在环境变量问题。

在 CMD 中,echo %GIT_SSH% 以查看它是否已设置(PuTTY/Plink 会这样做)。如果已设置,并且您想使用 openssh,请使用 set GIT_SSH= 清除它。

完成此操作后,我可以在 CMD 中使用 ssh 毫无问题地进行推送和拉取,尽管 Git Bash 仍然无法正常工作。

【讨论】:

以上是关于(git bash) 推送到 bitbucket 忽略 SSH 密钥的主要内容,如果未能解决你的问题,请参考以下文章

无法推送到 Bitbucket 上的 Git 存储库

无法推送到 Bitbucket 上的 Git 存储库

如何从 Cake 构建任务将标签推送到 Bamboo 中的 Bitbucket Git 存储库?

Bitbucket管道无法推送到heroku

Bitbucket repo:将 webhook 推送到无人机失败

如何使用 Git Bash 推送到 GitHub?