(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
返回如下结果
这意味着我在本地和 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 密钥的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Cake 构建任务将标签推送到 Bamboo 中的 Bitbucket Git 存储库?