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

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

git push heroku master

但会出现以下错误:

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

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

224444 次浏览

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

  • 这是正确的道路。
  • 该文件的权限为0600。
  • ~/.ssh的权限是0700。

您必须将您的公钥上传到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 2007debug1: Connecting to heroku.com [50.19.85.156] port 22.debug1: Connection established.debug1: identity file /c/Wrong/Directory/.ssh/identity type -1debug1: identity file /c/Wrong/Directory/.ssh/id_rsa type -1debug1: identity file /c/Wrong/Directory/.ssh/id_dsa type -1debug1: Remote protocol version 2.0, remote software version Twisteddebug1: no match: Twisteddebug1: Enabling compatibility mode for protocol 2.0debug1: Local version string SSH-2.0-OpenSSH_4.6debug1: SSH2_MSG_KEXINIT sentdebug1: SSH2_MSG_KEXINIT receiveddebug1: kex: server->client aes128-cbc hmac-md5 nonedebug1: kex: client->server aes128-cbc hmac-md5 nonedebug1: sending SSH2_MSG_KEXDH_INITdebug1: expecting SSH2_MSG_KEXDH_REPLYdebug1: Host 'heroku.com' is known and matches the RSA host key.debug1: Found key in /c/Wrong/Directory/.ssh/known_hosts:1debug1: ssh_rsa_verify: signature correctdebug1: SSH2_MSG_NEWKEYS sentdebug1: expecting SSH2_MSG_NEWKEYSdebug1: SSH2_MSG_NEWKEYS receiveddebug1: SSH2_MSG_SERVICE_REQUEST sentdebug1: SSH2_MSG_SERVICE_ACCEPT receiveddebug1: Authentications that can continue: publickeydebug1: Next authentication method: publickeydebug1: Trying private key: /c/Wrong/Directory/.ssh/identitydebug1: Trying private key: /c/Wrong/Directory/.ssh/id_rsadebug1: Trying private key: /c/Wrong/Directory/.ssh/id_dsadebug1: No more authentication methods to try.

Permission denied (publickey).

从上面可以观察到,ssh在/c/Wrong/Directory/.ssh目录中查找密钥,这不是我们刚刚添加到heroku的公钥所在的目录(使用heroku keys:add ~/.ssh/id_rsa.pub)(请注意,在Windows OS#2中,#3路径在win 7/8中是#4

要查看当前主目录,请执行以下操作:echo $HOMEecho %HOME%(Windows)

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

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

  2. 关于ssh在错误目录中查找密钥的问题以及解决方案。

以下是解释如何管理ssh密钥的链接:https://devcenter.heroku.com/articles/keys#adding-keys-to-heroku

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

  1. 我删除了所有id_rsa*文件,并使用这个指南生成了一个新的SSH。
  2. 然后,我销毁了heroku应用程序。删除了~/. heroku/凭据文件。
  3. 'heroku创建'命令(由于凭据文件已被删除,它会提示您输入电子邮件/密码。
  4. 最后键入'heroku key: add',它将上传默认的~/. ssh/id_rsa.pub文件。
  5. 它工作!嗯…… YMMV,但我真的希望这能有所帮助,因为我整天都在努力解决这个问题!哈哈

我有同样的问题,下面的步骤为我工作,

->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:\用户\yourusername.heroku\信誉和C:\用户\yourusername.ssh\known_hosts

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

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

我希望这能有所帮助。

在Windows 7,64位上,上述解决方案(Onur Turhan的)对我有用,略有变化如下

C:\Users\MyName > heroku login

输入邮箱/密码

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

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

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

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

我自杀了3天,尝试了所有可能的组合,试图让这个工作-我终于尝试制作一个DSA键,它奏效了。

尝试DSA而不是RSA,如果它不适合你。

(我使用的是Ubuntu 11.10、ruby 1.8.7、heroku 2.15.1)

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

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

    echo %HOMEPATH%

这个问题困扰了我几天。

这可能会有帮助。

1)找出你现在在Heroku中拥有的密钥。

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

2)构建一个~/. ssh/config文件:

$ sudo vim ~/.ssh/config

使用此信息进行编辑

Host heroku.comHostname heroku.comPort 22IdentitiesOnly yesIdentityFile ~/.ssh/ssh-dss # location and name of your private keyTCPKeepAlive yesUser joe@workstation.local

这是我的解决方案:

ssh-add ~/.ssh/my_heroku_key_rsa

我有同样的问题,因为我没有公钥,所以我做了:

heroku keys:clearheroku keys:add

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

如果你想使用“sudo”,例如:

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

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

sudo sucd /root/.sshssh-keygen -t rsa....heroku keys:add id_rsa.pub

它会起作用的。

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

cd /home/user/.ssh

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

如果您已经上传了密钥,请尝试删除密钥,然后重新上传#36825;一个新的密钥

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

这应该能行。

分享我的经验:

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

所以我试着将我的密钥重命名为“id_rsa”和“id_rsa.pub”,它奏效了。

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

我不得不做:

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

然后它奏效了:

$ git push heroku master

一个命令工作:

heroku keys:add

它会让一个如果它不存在。

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

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

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

遵循本教程的ssh-keygenkeys:add,它有效!

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

cd ~/.sshsubl config

'subl'用于Sublime Text,但你可以使用任何你想要的编辑器。查找“IdtyFile”行并确保它列出了非公钥:

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.

推是为我工作,然后突然停止。

如果heroku api正在经历停机,当您尝试推送时,您将收到此错误。

检查:

在吓坏之前。

在尝试了所有这些想法之后,我仍然有问题。这是我的问题:

我的远程heroku存储库被吓坏了。我刷新它如下:

git remote -v

然后删除错误的heroku:

git remote rm heroku

然后添加新的

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

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

我遇到的问题是在Windows上,每当我运行“heroku键:添加”时,它总是选择github键。所以这是我解决问题的步骤

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

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

  1. 重新运行命令heroku键:添加

上面的命令不会给出以下输出找到现有公钥:C:/Documents and Setings/Admin/. ssh/id_rsa.pub上传SSH公钥C:/Documents and Setings/Admin/. ssh/id_rsa.pub.

  1. 现在使用git推送heroku大师

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

尝试修复磁盘实用程序(Mac OS X)中的权限。帮助我

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

  1. 首先,登录:heroku登录
  2. 清除所有键:heroku键:清除
  3. 删除.ssh/ folder中本地文件夹中的所有文件(所有.pub文件和know_host
  4. 再次登录:heroku登录-u将提示没有键,所以按照屏幕上的说明。

首先确保隐藏的文件在Mac中可见。如果没有:

  • 打开终端并输入默认写入com.apple.FinderAppleShowAllFiles TRUE
  • 所有文件均为真
  • killall Finder

后续步骤:

  • 转到Users/user_name/.ssh/删除了所有文件。
  • 打开终端类型ssh-keygen -t dsa
  • 然后heroku keys:add ~/.ssh/id_dsa.pub

注意:我在Mac OSX 10.7.2 Lion中做到了这一点。尽管其他程序也应该相同。

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

sudo su

密码

解决方案dmagkic帮助我在最后:

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

中的键

要遵循的顺序

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

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

以下是对我有用的方法。heroku站点没有被添加到您的已知主机中。转到windows-其他-显示视图-git-git存储库。从那里克隆存储库。克隆它后,删除刚刚创建的存储库,然后从文件菜单中导入它。这样做是因为当您克隆存储库时,它不会将其添加到资源管理器视图。现在您应该拥有git存储库和资源管理器视图。

当使用

git push heroku production:master

使用主目录~/. ssh/id_rsa下的公钥

来弥补这一切

您应该以不同的用户身份登录可能是root

sudo su

然后通过发出以下命令重新开始

heroku keys:clear //removes existing keysssh-keygen -t rsa //generates a new key in ~/.ssh folder (set a password)heroku keys:add   //uploads the new key, ~/.ssh/id_rsa is uploadedgit push heroku production:master

对于那些在Windows 7上尝试了上述所有方法但仍然不起作用的人,这是我所做的:-从Git目录C:\Program Files(x86)\Git\打开GitBash.exe(不要打开命令提示符,这将不起作用)。-添加下面提到的上面,但你必须删除#

Host heroku.comHostname heroku.comPort 22IdentitiesOnly yesIdentityFile ~/.ssh/ssh-dssTCPKeepAlive yesUser joe@workstation.local

现在运行git推送heroku master,它应该可以工作。

如果其他答案对你不起作用。试试这个!

有时你只需要再推一次。由于互联网连接缓慢(当你下载或使用p2p时),今天发生在我身上。

请看下面的截图:

输入图片描述

除了处理SSH密钥,您还可以尝试Heroku的新Beta HTTPGit支持。它只使用您的API令牌并在端口443上运行,因此没有SSH密钥或端口22可供干扰。

要使用HTTPGit,首先确保工具包已更新并且您的凭据是最新的:

$ heroku update$ heroku login

(这一点很重要,因为Heroku HTTP Git的身份验证方式与其他工具带略有不同)

在测试期间,您可以通过将--http-git标志传递给相关的heroku apps:createheroku git:cloneheroku git:remote命令来获得HTTP。要创建一个新应用程序并使用HTTP Git远程配置它,请运行以下命令:

$ heroku apps:create --http-git

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

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

看看Dev Center留档了解如何为Heroku设置HTTP Git

我重新安装了heroku工具带,它起作用了。