我正在尝试使用以下命令行将代码部署到heroku:

git push heroku master

但会出现以下错误:

Permission denied (publickey).
fatal: The remote end hung up unexpectedly

我已经上传了我的公共SSH密钥,但仍然会出现此错误。


当前回答

上面给出的答案确实有效,但我发现我需要做一些额外的步骤才能奏效。

我删除了所有id_rsa*文件,并使用本指南生成了一个新的SSH。然后,我销毁了heroku应用程序。删除了~/.heroku/credentials文件。“heroku create”命令(由于凭据文件已删除,它将提示您输入电子邮件/密码。最后键入“heroku-keys:add”,它将上载默认的~/.ssh/id_rsa.pub文件。它起作用了!好YMMV,但我真的希望这能对我有帮助,因为我一整天都在努力解决这个问题!哈哈

其他回答

听起来您的~/.ssh/authorized_keys文件设置不正确。验证:

它在正确的路径上。文件的权限为0600。~/.ssh的权限为0700。

分享我的经验:

Git(我自己安装的)正在查找名为“id_rsa”的密钥。

所以我尝试将我的密钥重命名为“id_rsa”和“id_rsa.pub”,结果成功了。

顺便说一句,我肯定还有其他方法可以做到这一点,但我还没有深入研究。

当TortoiseGIT安装在我的机器上时,我遇到了这个问题。将环境变量GIT_SSH从

"c:\Program Files\TortoiseGit\bin\TortoisePlink.exe"

to

"c:\Program Files (x86)\Git\bin\ssh.exe"

使用ssh-keygen和keys完成本教程:add,它起作用了!

dmajkic的解决方案最终帮助了我:

对于Windows用户,这可能意味着:git客户端找不到您的密钥。检查c:\Users\UserName.ssh\和!环境变量HOME=c:\Users\UserName\

除了处理SSH密钥,您还可以尝试Heroku的新测试版HTTP Git支持。它只使用您的API令牌并在端口443上运行,因此无需使用SSH密钥或端口22。

要使用HTTP Git,首先确保Toolbelt已更新,并且您的凭据是最新的:

$ heroku update
$ heroku login

(这一点很重要,因为Heroku HTTP Git的认证方式与Toolbelt的其他方式略有不同)

在测试期间,通过将--httpgit标志传递给相关的heroku应用程序:create、heroku git:clone和heroku git:remote命令,可以获得HTTP。要创建新的应用程序并使用HTTP Git远程配置它,请运行以下命令:

$ heroku apps:create --http-git

要将现有应用程序从SSH更改为HTTP Git,只需从计算机上的应用程序目录运行以下命令:

$ heroku git:remote --http-git
Git remote heroku updated

有关如何为Heroku设置HTTP Git的详细信息,请查看开发中心文档。