在部署Heroku代码时出现“Permission denied(publickey)”错误。致命错误:远程端意外挂断。

857

我试图使用以下命令行将我的代码部署到Heroku:

git push heroku master

但是收到以下错误:

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

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


sebarmeli的解决方案对你有用吗?我没有使用名为"id_rsa.pub"的RSA密钥,只需输入"heroku keys:add ~/.ssh/<rsa_key_filename>.pub"。 - Michael Merchant
6
大约一年前我遇到了这个问题,当时提出的解决方案并没有完全奏效,但是我总算想出了方法(现在我已经不记得具体做了什么)。Sebarmeli在我不再需要帮助后回答了我的问题,尽管他的答案似乎在那些遇到类似问题的人中很受欢迎。如果这能让人们感到满意,我愿意选择他的答案作为正确的答案。 - vich
3
以下这行代码解决了我的问题。heroku accounts:set youraccount - Mingming
今天似乎有一些Heroku服务出现了问题--如果你正在调试,请务必检查他们的网站是否有问题! - Philip Guin
我曾经遇到了同样的问题,我所需要做的就是运行 heroku login 命令,然后输入我的邮箱和密码,再尝试一次即可。 - Alejandro Veintimilla
34个回答

6

在Windows 7的64位系统上,以上解决方案(Onur Turhan的)对我也有效,只需稍作修改即可,具体如下:

C:\Users\MyName > heroku login

输入电子邮件/密码

C:\Users\MyName >ssh-keygen -t rsa -f id_rsa

这将在我的 c:\Users\MyName 目录下生成两个文件(id_rsa 和 id_rsa.pub),而不是在 .ssh 目录中。

heroku keys:add id_rsa.pub
git clone git@heroku.com:some-heiku-xxxx.git -o heroku

我猜添加正确的"id_rsa.pub"文件是最重要的。使用keygen生成公钥后,只需验证您是否通过查看创建时间戳来添加了正确的密钥。


5

当我在我的电脑上安装TortoiseGIT时,遇到了这个问题。在将环境变量GIT_SSH更改为

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

为了

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

按照这个教程使用 ssh-keygenkeys:add,它可以正常工作!


你是跟着哪个教程学的? - eckes
请仅返回翻译后的文本:来自Onur Turhan的上面那个。 - zooli
使用Git提供的ssh是一个非常好的解决方案。在这里理解plink/pageant/putty真的变得很复杂... - Stéphane

5

只需要一个命令:

heroku keys:add

如果不存在,它将创建一个。

请勿点踩,这并没有针对错误上下文进行回答。我已经删除了现有的内容,创建了新的内容,并添加了密钥,但仍然遇到问题。你提出的 heroku keys:add 并不是一个完整的答案。 - JGallardo

4

我之前可以进行push操作,但突然间就不能了。

如果heroku api正在经历停机时间,当您尝试进行push操作时,您将会遇到这个错误。

在过度惊慌之前,请检查:

https://status.heroku.com/


3

操作步骤

$ heroku login
$ ssh-keygen -t rsa
$ heroku keys:add

执行第二条语句时,它会要求输入,请按Enter(回车)键三次,然后一个密钥将被添加。

很多人都有完全相同的答案,但它并没有按照所述的方式工作。 - JGallardo

2
给出的答案确实可行,但我发现在它起作用之前需要进行一些额外的步骤。
  1. 我删除了所有的id_rsa*文件,并使用this指南生成了一个新的SSH。
  2. 然后,我销毁了Heroku应用程序。删除了~/.heroku/credentials文件。
  3. 执行'heroku create'命令(由于凭据文件已被删除,它将提示您输入电子邮件/密码)。
  4. 最后,键入'heroku keys:add',它将上传默认的~/.ssh/id_rsa.pub文件。
  5. 它可以工作!好吧...你的情况可能有所不同,但我真的希望这可以帮助到你,因为我整天都在努力解决这个问题!哈哈

2

对于那些在Windows 7上尝试了以上所有方法,但仍然无法解决问题的人,这是我所做的: - 从Git目录C:\ Program Files(x86)\ Git \中打开GitBash.exe(不要打开命令提示符,这样行不通)。 - 添加如上所述的内容,但您必须删除#

Host heroku.com
Hostname heroku.com 
Port 22 
IdentitiesOnly yes 
IdentityFile ~/.ssh/ssh-dss
TCPKeepAlive yes 
User joe@workstation.local

现在运行git push heroku master,应该就可以了。

也点个赞。昨天花了6个小时,但感觉这并不是我想要掌握的知识。我可以通过powershell和命令提示符将代码推送到github,但只有Git Bash适用于heroku。现在它每次都能正常工作。我还会在git push heroku master之前先进行heroku登录。可能并非必须,但目前我因为迷信而一直这样做。简直是场噩梦。 - JMDenver

1

看起来你的~/.ssh/authorized_keys文件没有正确设置。请确认以下内容:

  • 它位于正确的路径。
  • 文件权限为0600。
  • ~/.ssh的权限为0700。

我对这方面还比较新,所以如果听起来很蠢就抱歉了,但是我的公共SSH密钥文件只是一堆字符(标准密钥生成),没有其他信息。当我在电脑上安装git时,我获得了这个SSH文件。我认为这将是我用来部署我的heroku代码的相同公共SSH密钥。或者heroku有自己的公共SSH密钥需要我生成吗? - vich
1
是的,您可以将公共SSH密钥重复使用于许多不同的主机。我不确定Heroku的工作原理,但我可以看到我的回答在这种情况下并不适用。您可以验证他们的Web界面是否接受了您的密钥。如果一切仍然正常,请尝试联系他们的支持团队。 - cdhowie
谢谢你的建议!我已经联系了Heroku支持。一旦我得到答复,我会更新的。 - vich
好的。我也很想听听问题是什么。 :) - cdhowie
1
所以,问题出在公共SSH密钥文件的命名上。当我最初创建该文件时,我还将其重命名,这导致在部署时出现问题,因为git无法正确连接,从而使heroku部署失败。为了解决这个问题,我生成了一个新的公共SSH密钥,并在再次尝试之前将其添加到github中。现在它已经连接成功了!感谢您的帮助! - vich

1

我曾经遇到过同样的问题,按照以下步骤应该会有所帮助:

  1. 首先登录:heroku login
  2. 清除所有密钥:heroku keys:clear
  3. 删除本地文件夹中的所有文件(所有.pub文件和know_host)在.ssh/文件夹
  4. 再次登录:heroku login - 您将提示没有密钥,请按照屏幕上的说明操作。

无法解决问题。我已登录,成功添加了密钥,仍然出现“Permission denied (publickey)”错误。 - JGallardo
为什么我们需要删除.ssh文件夹中的所有文件? - Starx

1
我遇到的问题出现在Windows上,无论何时运行“heroku keys:add”都会选择github密钥。以下是我解决这个问题的步骤:
  1. 进入“文档和设置”文件夹下的“.ssh”目录并删除github密钥
  2. 运行命令:heroku keys:add

上述命令要求我生成新的密钥,以下是输出: Could not find an existing public key. Would you like to generate one? [Yn] Y Generating new SSH public key. Uploading SSH public key C:/Documents and Settings/Admin/.ssh/id_rsa.pub... done ! 'heroku' gem已停用并替换为Heroku Toolbelt,请从https://toolbelt.heroku.com下载并安装。

  1. 重新运行命令:heroku keys:add

上述命令将给出以下输出: Found existing public key: C:/Documents and Settings/Admin/.ssh/id_rsa.pub Uploading SSH public key C:/Documents and Settings/Admin/.ssh/id_rsa.pub... done

  1. 现在使用git push heroku master

对我来说,使用上述步骤解决了问题,并且能够在云上部署应用程序。


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