部署heroku代码时,权限被拒绝(公钥)。致命:远端意外挂断


849

我正在尝试使用以下命令行将代码部署到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
大约一年前,我遇到了这个问题,当时提出的解决方案并不完全适合我,但是我却以某种方式解决了这个问题(此时,我不记得自己到底做了什么)。在我不再需要帮助之后,塞巴梅利回答了一会儿,尽管似乎他的回答在遇到类似问题的人中很受欢迎。如果它使人们感到高兴,我将选择他的答案作为正确的答案。
2011年

3
下一行为我解决了这个问题。Heroku的帐户:一套youraccount
铭铭

似乎某些heroku服务今天已关闭-如果要调试此功能,请确保检查其站点是否有问题!
菲利普·吉恩

我遇到了同样的问题,我所要做的就是heroku login写电子邮件和密码,然后重试。
Alejandro Veintimilla 2014年

Answers:


1474

您必须将公钥上传到Heroku:

heroku keys:add ~/.ssh/id_rsa.pub

如果您没有公共密钥,Heroku会提示您自动添加一个无缝运行的密钥。只需使用:

heroku keys:add

要清除以前的所有键,请执行以下操作:

heroku keys:clear

要显示所有现有键,请执行以下操作:

heroku keys

编辑:

以上似乎对我不起作用。我弄乱了HOME环境变量,因此SSH在错误的目录中搜索密钥。

为确保SSH检查正确目录中的密钥,请执行以下操作:

ssh -vT git@heroku.com

这将显示以下(示例)行

OpenSSH_4.6p1, OpenSSL 0.9.8e 23 Feb 2007
debug1: Connecting to heroku.com [50.19.85.156] port 22.
debug1: Connection established.
debug1: identity file /c/Wrong/Directory/.ssh/identity type -1
debug1: identity file /c/Wrong/Directory/.ssh/id_rsa type -1
debug1: identity file /c/Wrong/Directory/.ssh/id_dsa type -1
debug1: Remote protocol version 2.0, remote software version Twisted
debug1: no match: Twisted
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_4.6
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-cbc hmac-md5 none
debug1: kex: client->server aes128-cbc hmac-md5 none
debug1: sending SSH2_MSG_KEXDH_INIT
debug1: expecting SSH2_MSG_KEXDH_REPLY
debug1: Host 'heroku.com' is known and matches the RSA host key.
debug1: Found key in /c/Wrong/Directory/.ssh/known_hosts:1
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Trying private key: /c/Wrong/Directory/.ssh/identity
debug1: Trying private key: /c/Wrong/Directory/.ssh/id_rsa
debug1: Trying private key: /c/Wrong/Directory/.ssh/id_dsa
debug1: No more authentication methods to try.

Permission denied (publickey).

从上面您可以观察到ssh在/c/Wrong/Directory/.ssh目录中查找密钥,该目录不是我们刚刚添加到heroku(使用heroku keys:add ~/.ssh/id_rsa.pub)的公共密钥的位置(请注意,在Windows OS中~是指HOMEwinC:\Users\UserName 7/8 中的路径是

要查看您当前的主目录,请执行:echo $HOMEecho %HOME%(Windows)

HOME正确设置目录(正确的说,我是指目录的父目录.ssh,以便ssh可以在正确的目录中查找键),请参考以下链接:

  1. SO答案关于如何永久设置Unix环境变量

  2. 因此,关于ssh在错误目录中寻找密钥的问题及其解决方案。


31
没为我工作。我必须撤消旧密钥,然后让heroku应用为我生成并上传一个新密钥。请参阅Lithium提供的有关如何执行此操作的链接。
borisdiakur 2011年

9
只是给人们的说明,说它没有用。您需要确保已拥有ssh公钥。 help.github.com/mac-set-up-git,以获取有关在Mac上执行此操作的更多信息。
瑞安

92
如果您没有公共密钥,heroku会提示您自动添加一个无缝运行的密钥。只需使用:heroku keys:add
vansan 2012年

13
ssh-keygen -t rsa -C "your_email@youremail.com"如果仍然有错误,也尝试创建另一个file.pub并在此答案的推荐命令中使用该文件
Tom Roggero 2012年

3
在添加到heroku之前,您可能必须创建/重新创建密钥。 whatibroke.com/?p=284很适合我的Windows 7
哈立德·赛义夫拉

146

我遇到了同样的问题,以下步骤对我有用,

->heroku login

abc@gmail.com和密码

->cd C:\Users\yourusername\.ssh    (OR for cygwin shell ->cd ~/.ssh)

->ssh-keygen -t rsa -f id_rsa

如果询问任何密码短语,请不要使用空格,请填写密码短语,但不要忘记。

生成密钥后,您需要添加它,就像这样

$ ssh-add

和它到heroku

->heroku keys:add "id_rsa.pub"

将目录更改为工作区,然后

->git clone git@heroku.com:stark-dawn-1234.git -o heroku

使用上面设置的密码。


实际上,我还删除了以下文件,但不确定它们是否为imp,

C:\ Users \ yourusername.heroku \ credientals和C:\ Users \ yourusername.ssh \ known_hosts


21
这为我解决了。我认为原因是,我有来自的“ github_rsa”文件Github for Windows,但没有id_rsa文件。
msiemens 2012年

不适用于Openssl安装程序。我必须安装CopSSH才能获取ssh-keygen.exe程序。
djangofan 2013年

在Windows 7上,我必须在git bash命令提示符下执行此操作才能运行ssh-keygen。谢谢。
2013年

这对我有用,似乎是最好的解决方案。更好的问题是,为什么我要这样重复隔日
保罗·兰顿

3
这对我有用。如果您在Windows上使用Git Bash,则密钥必须命名为id_rsa.pub,否则它将不起作用,即使您将其他内容上传到Heroku。
2013年

90

这个问题困扰了我几天。

这可能会有所帮助。

1)找出您现在在Heroku中拥有的键。

$ heroku keys
=== 1 key for joe@example.com
ssh-dss AAAAB8NzaC...DVj3R4Ww== joe@workstation.local

2)建立一个〜/ .ssh / config文件:

$ sudo vim ~/.ssh/config

使用此信息进行编辑

Host heroku.com
Hostname heroku.com 
Port 22 
IdentitiesOnly yes 
IdentityFile ~/.ssh/ssh-dss # location and name of your private key
TCPKeepAlive yes 
User joe@workstation.local

3
除此之外,这对我也很有效!但是,User在最后一行之前应该有一个换行符。另外,它抱怨该#评论,因此我将其删除。
Erik J

2
确保“ IdentityFile”具有非公共文件(如上),而不是公共文件。由于某种原因,我的版本是公共版本,因此抛出错误,表明该文件的权限不正确。
凯文·K

将此host信息添加到我的配置文件中为我解决了这个问题。我创建了一个heroku rsa密钥,当尝试尝试时,对heroku.pub的默认权限引发了错误git push。我不得不chmod 600 heroku.pub,然后当我推动它工作时。
迪伦·瓦拉德

1
IdentityFile ~/.ssh/ssh-dss私钥的路径。您要在此处输入私钥,而不是公共密钥。
HairOfTheDog

1
这个答案使我感到无比重要。我正在运行Windows 7 64位。还有许多其他步骤可以帮助您,例如:ssh-keygen -t rsa -f id_rsa然后删除任何heroku密钥并添加刚刚创建的一个:heroku keys:clear heroku keys:add C:\ Users \ username \ .ssh \ id_rsa.pub,然后将上面的文件稍微修改为IdentityFile C:/Users/windows_username/.ssh/id_rsa
Paul


35

我遇到了同样的问题,因为我没有公共密钥,所以我这样做了:

heroku keys:clear
heroku keys:add

这将生成一个公钥,然后运行良好


1
仍然出现错误。我尝试了不同的方法,解决了问题,然后在下周遇到了同样的问题...我不知道为什么Heroku会这样。
JGallardo 2013年

31

如果您是Windows用户,则此处的其他解决方案可能无法解决您的问题。

我使用Windows 7 64位+ Git-1.7.7.1-preview20111027,解决方案是将密钥从复制C:\users\user\.sshC:\Program Files (x86)\Git\.ssh。这就是这个git客户端在推送到heroku时寻找密钥的地方。

我希望这有帮助。


2
对我来说是c:\ msysgit \ .ssh。我刚刚在个人文件夹中创建了一个指向.ssh文件夹的目录连接。
科林·鲍恩

同样的问题在这里,但是为什么我不知道。每次添加密钥时,它都会显示使用“用户”文件夹中的密钥的功能,与此修复程序相同,但是有效。
哈里斯·克拉吉纳

12
不要那样做!这是可行的,因为HOME为空,并且默认为当前exe目录。如果有人设法以访客身份登录,则可以获取您的私钥。在“高级用户设置”中将HOME设置为%HOME_DRIVE %% HOMEPATH%(或Win7上的C:\ Users \ <用户名>),然后在其中复制.ssh目录。
dmajkic'5

除了@dmajkic,在Win7上,请参见Windows Git技巧,该技巧%HOME%环境变量设置为%USERPROFILE%
史蒂夫·艾农

29

这是我的解决方案:

ssh-add ~/.ssh/my_heroku_key_rsa

1
同样在这里。谢谢。另外,请确保您的私钥具有与其关联的正确权限。chmod 600 ~/.ssh/heroku_rsa
Arnaud Brousseau

谢谢-这也是我的问题,我也需要先遵循Arnaud的建议。
Mike Atlas 2013年

15

分享我的经验:

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

因此,我尝试将我的密钥重命名为“ id_rsa”和“ id_rsa.pub”,并且可以正常工作。

顺便说一句,我敢肯定还有另一种方法可以做到,但是我还没有深入。


3
为我工作(Windows 7 64位)。我安装了适用于Windows的GitHub,它将键命名为GitHub_rsa。有没有办法指定Git应该使用哪个密钥?
Spongeboy

11

如果您已经上传了密钥,请尝试删除密钥,然后使用新密钥重新上传。

 heroku keys:remove //removes the existing key
 ssh-keygen -t rsa //generates a new key in ~/.ssh folder
 heroku keys:add    //uploads the new key, if no arguments r passed then the key generated                              
                    //in default directroy i.e., ~/.ssh/id_rsa is uploaded
 git push heroku

这应该工作。


谢谢,这对我有用。虽然我完全使用heroku keys:clear而不是heroku keys:remove。
彼得·德·里德

1
错误,Must specify KEY to remove
JGallardo 2013年

7

我花了三天时间自杀,尝试各种可能的组合以使其正常工作-我终于尝试制作DSA密钥,它起作用了。

如果对您不起作用,请尝试使用DSA而不是RSA。

(我正在使用Ubuntu 11.10,Ruby 1.8.7,heroku 2.15.1)


1
我与Heroku的支持人员进行了交谈,他们建议将其作为临时解决方案。它对我有用,但是我确信这并不是每种情况的答案。
Sauce McBoss,2012年

3
不知道为什么这个答案应该被否决……它为我解决了这个问题,并且为这个问题提供了答案。
Sauce McBoss

我遇到了相反的问题……尽管Heroku开发人员文档说您可以使用DSA密钥(ssh-dss),但我一直收到“权限被拒绝”消息,直到切换到RSA密钥为止
brandonjp

为我工作。如果在heroku创建后和git push之前更改了密钥,则在dsa和rsa之间切换似乎可行。
普拉莫(Pramod)2012年

以及如何创建DSA密钥并将其添加到heroku?
coiso 2014年

6

在Windows 7,64 bit上,上述解决方案(Onur Turhan的解决方案)对我起作用,但有一些细微的变化,如下所示

C:\Users\MyName > heroku login

输入电子邮件/密码

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

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

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

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


5

一个命令起作用:

heroku keys:add

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


Downvote,这不会在错误的上下文中回答。我删除了现有的文件,创建了新的文件,并添加了密钥,但仍然遇到问题。您的建议heroku keys:add不是一个完整的答案。
JGallardo 2013年

5

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

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

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

并按照本教程有ssh-keygenkeys:add,它的作品!


您遵循哪个教程?
eckes 2012年

一个来自Onur Turhan
zooli 2012年

使用Git提供的ssh是一个很好的解决方案。它真的越来越砰砰/盛会/腻子这里了解复杂...
斯特凡


3

遵循的顺序

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

在执行第二条语句时,它会要求输入,只需按Enter(回车)键三下,就会添加一个键。


很多人都有完全相同的答案。并无法按照规定进行操作。
JGallardo 2013年

2

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

  1. 我使用指南删除了所有id_rsa *文件并生成了新的SSH 。
  2. 然后,我破坏了heroku应用程序。删除了〜/ .heroku / credentials文件。
  3. “ heroku create”命令(由于凭据文件已删除,它将提示您输入电子邮件/密码。
  4. 最后,键入“ heroku keys:add”,它将上传默认的〜/ .ssh / id_rsa.pub文件。
  5. 有用!嗯.... YMMV,但我确实希望这可以对我有所帮助,因为我整天都在努力解决这个问题!哈哈

2

对于所有在Windows 7上尝试了上述所有功能但仍然无法正常工作的人,这是我要做的事情:-从Git目录C:\ Program Files(x86)\ Git \(不要打开GitBash.exe) t打开命令提示符,此操作将无效)。- 如上所述添加以下内容,但您必须删除#

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,2015年

1

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

  • 这是正确的路径。
  • 该文件的权限为0600。
  • 的权限为~/.ssh0700。

我对这些东西还很陌生,因此,如果听起来有点愚蠢,对不起,但是我的公共SSH密钥文件只是一堆字符(标准密钥生成器),没有其他信息。我在计算机上设置git时获得了此SSH文件。我以为这将与我用来部署heroku代码的公共SSH密钥相同。还是heroku有我需要生成的自己的公共SSH密钥?
2010年

1
是的,您可以将公共SSH密钥重用于许多不同的主机。我不确定Heroku的工作原理,但是我可以看到我的答案在这种情况下并不适用。您可以验证其密钥已被其Web界面接受。如果一切仍然无法解决,请尝试与他们的支持团队联系。
cdhowie 2010年

感谢您的建议!我已经联系了heroku支持。我将在回答后更新。
2010年

好。我很想知道问题所在。:)
cdhowie

1
因此,问题在于命名公共SSH密钥文件。最初创建文件时,我也对其进行了重命名,这导致部署时出现问题,因为git无法正确连接,因此也导致heroku部署失败。为了解决该问题,我生成了一个新的公共SSH密钥,并将其添加到github上,然后再次尝试。现在连接!谢谢你的帮助!
2010年

1

我必须做:

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

然后工作了:

$ git push heroku master  

1

检查您的.ssh配置中的heroku。转到.ssh文件夹并打开配置文件

cd ~/.ssh
subl config

'subl'用于Sublime Text,但是您可以使用所需的任何编辑器。查找“ IdentityFile”行,并确保列出了非公共密钥:

IdentityFile "/Users/ircmullaney/.ssh/my_ssh"

IdentityFile "/Users/ircmullaney/.ssh/my_ssh.pub"

对我来说就做到了。我不确定为什么我的配置文件中有公共版本,但确实如此,并且抛出了错误:

Permissions 0644 for '/Users/ircmullaney/.ssh/my_ssh.pub' are too open.

1

尝试所有这些想法后,我仍然遇到问题。这是我的问题:

我的远程heroku存储库被选中。我刷新如下:

git remote -v

然后删除错误的heroku之一:

git remote rm heroku

然后添加新的

git remote add heroku git@heroku.com:sitename.git

您可以从Heroku设置页面获取应用程序的站点名称。祝好运!


1

我遇到的问题是在Windows上,无论何时运行“ heroku keys:add”,它总是选择github密钥。所以这是我遵循的解决问题的步骤

  1. 转到“文档和设置”文件夹下的.ssh目录,并删除了git hub键
  2. 运行命令heroku keys:add

上面的命令要求我生成一个新密钥,然后是输出找不到现有的公共密钥。您想生成一个吗?[Yn]是生成新的SSH公钥。上载SSH公钥C:/ Documents and Settings / Admin / .ssh / id_rsa.pub ...已完成!已弃用'heroku'宝石,并替换为Heroku Toolbelt,可从https://toolbelt.heroku.com下载并安装。

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

上面的命令不会提供以下输出:找到现有的公共密钥:C:/ Documents and Settings / Admin / .ssh / id_rsa.pub上传SSH公共密钥C:/ Documents and Settings / Admin / .ssh / id_rsa.pub.。完成

  1. 现在使用git push heroku master

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


1

我遇到了同样的问题;遵循以下步骤应该会有所帮助:

  1. 首先,登录:heroku登录
  2. 清除所有键:heroku键:清除
  3. 删除本地文件夹中的所有.pub文件(和know_host中的所有文件).ssh/ folder
  4. 再次登录:heroku登录-您将无提示输入提示,因此请按照屏幕上的说明进行操作。

无法解决问题。我已经登录,成功添加了密钥,但仍然得到Permission denied (publickey).
JGallardo

为什么我们需要删除.ssh文件夹中的所有文件?
Starx 2014年

0

我只想补充一点,该目录不一定是C:\ Users \ [用户名] \。ssh。这是您在其中创建公钥的目录。

例如,我在Windows中的主目录已更改为C:\ [用户名]。您的.ssh子文件夹中的主目录是您可能已创建密钥的最佳位置。您可以使用以下命令在Windows中检查主目录:

    echo %HOMEPATH%

0

如果要使用“ sudo”,则示例:

sudo git clone git@heroku.com......... -o heroku

您还应该为根用户生成ssh密钥。

sudo su
cd /root/.ssh  
ssh-keygen -t rsa
....
heroku keys:add id_rsa.pub

它会工作。

如果不使用root用户,请在用户目录中生成ssh密钥。

cd /home/user/.ssh

对不起,如果我的句子搞砸了...


0

尝试修复“磁盘工具”(Mac OS X)中的权限。帮助过我


0

首先,请确保隐藏文件在Mac中可见。如果不这样做:

  • 打开终端并输入 defaults write com.apple.Finder AppleShowAllFiles TRUE
  • killall Finder

下一步:

  • Users/user_name/.ssh/删除所有文件。
  • 开启终端输入 ssh-keygen -t dsa
  • 然后 heroku keys:add ~/.ssh/id_dsa.pub

注意:我在Mac OSX 10.7.2 Lion中做到了。虽然程序在其他方面也应该相同。


0

我也有这个问题。我正在使用Mac OSX。我修复的方法是以管理员身份登录

苏多苏

密码


0

dmajkic的解决方案终于对我有所帮助:

对于Windows用户,这可能意味着:git client无法找到您的密钥。检查c:\ Users \ UserName.ssh \中的密钥,然后!环境变量HOME = c:\ Users \ UserName \


0

这对我有用。heroku站点未添加到您的已知主机。转到window-other- show view-git-git存储库。从那里克隆存储库。克隆后,删除刚刚创建的存储库,然后从文件菜单导入它。这样做是因为克隆存储库时,它不会将其添加到资源管理器视图中。现在,您应该拥有git信息库和资源管理器视图。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.