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

我试图通过以下命令行将代码部署到heroku:

git push heroku master 

但得到以下错误:

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

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

你必须把你的公钥上传到Heroku:

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

如果您没有公钥,Heroku会提示您自动添加一个无缝工作。 只要使用:

 heroku keys:add 

要清除您之前的所有键,请执行

 heroku keys:clear 

要显示所有现有的密钥,请执行

 heroku keys 

编辑:

以上似乎并没有为我工作。 我搞砸了HOME环境variables,所以SSH在错误的目录中search密钥。

要确保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 keys:add ~/.ssh/id_rsa.pub (使用heroku keys:add ~/.ssh/id_rsa.pub )( 请注意,在Windows操作系统~指的是在赢得 heroku keys:add ~/.ssh/id_rsa.pub HOMEpath是C:\Users\UserName

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

要正确设置您的HOME目录(正确地指的是.ssh目录的父目录,以便ssh可以在正确的目录中查找关键字)引用这些链接:

  1. SO回答如何永久设置Unix环境variables

  2. 所以有关ssh寻找在错误的目录中的键和解决scheme相同的问题。

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

 ->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 

和它Herku

 ->heroku keys:add "id_rsa.pub" 

改变目录到工作区,比

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

使用上面设置的密码。


其实我也删除下面的文件,但不知道他们是什么,

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

这个问题在我身上搅了几天。

这可能有帮助。

1)现在找出你在Heroku里有什么钥匙。

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

2)build立一个〜/ .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 

这里是解释如何pipe理您的SSH密钥的链接: http : //devcenter.heroku.com/articles/keys#adding_keys_to_heroku

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

 heroku keys:clear heroku keys:add 

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

如果你是一个Windows用户,这里的其他解决scheme可能不会解决你的问题。

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

我希望这有帮助。

这是我的解决scheme:

 ssh-add ~/.ssh/my_heroku_key_rsa 

分享我的经验:

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

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

顺便说一句,我敢肯定,还有其他的方式来做到这一点,但我没有看得更深。

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

  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 ie, ~/.ssh/id_rsa is uploaded git push heroku 

这应该工作。

我杀了自己3天,尝试每一个可能的组合,试图让这个工作 – 我终于尝试做一个DSA密钥,而不是它的工作。

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

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

在Windows 7,64位,上述解决scheme(Onur Turhan's)为我工作,稍作修改如下

 C:\Users\MyName > heroku login 

input电子邮件/密码

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

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

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

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

一个单一的命令工作:

 heroku keys:add 

如果它不存在,将会生成一个。

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

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

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

并遵循本教程与ssh-keygenkeys:add ,它的作品!

推动正在为我工​​作,然后突然停下来。

如果heroku API正在经历停机时间,那么当您尝试推送时,将会出现此错误。

检查:

https://status.heroku.com/

之前吓到太难了。

上面给出的答案可以工作,但是发现在工作之前我需要做一些额外的步骤。

  1. 我删除了所有的id_rsa *文件,并使用本指南生成了一个新的SSH。
  2. 然后,我摧毁了heroku应用程序。 删除了〜/ .heroku / credentials文件。
  3. 'heroku创build'命令(并且由于凭证文件被删除,它会提示您input您的电子邮件/密码。
  4. 最后input'heroku keys:add',它会上传默认的〜/ .ssh / id_rsa.pub文件。
  5. 有用! 那么…. YMMV,但我真的希望这可以得到一些帮助,因为我挣扎了整整一天,试图弄清楚这一点! 哈哈

要遵循的顺序

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

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

对于那些在Windows 7上尝试上述所有内容的人,仍然无法正常工作,请执行以下操作: – 从Git目录中打开GitBash.exe C:\ Program Files(x86)\ Git \(don'打开命令提示符,这将无法正常工作)。 – 如上所述添加以下内容,但必须删除#

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

现在运行git push heroku master ,它应该工作。

这听起来像你的~/.ssh/authorized_keys文件没有正确设置。 validation:

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

我必须做:

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

然后它的工作:

 $ git push heroku master 

检查您的.sshconfiguration为heroku。 转到.ssh文件夹并打开configuration文件

 cd ~/.ssh subl config 

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

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

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

这是为我做的。 我不知道为什么我的configuration文件中有公共版本,但它确实和它是抛出错误:

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

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

我的远程heroku存储库被通缉。 我刷新它如下:

 git remote -v 

然后删除那个错误的heroku:

 git remote rm heroku 

然后添加新的

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

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

我面对的问题是在Windows上,总是每当我运行“heroku键:添加”它select了github键。 所以这里是我遵循的步骤来解决这个问题

  1. 进入“文档和设置”文件夹下的.ssh目录,并删除了git集线器密钥
  2. 运行heroku键盘命令:add

上述命令要求我生成一个新的密钥,以下是输出无法find一个现有的公钥。 你想生成一个? [Yn] Y生成新的SSH公钥。 上传SSH公钥C:/ Documents and Settings / Admin / .ssh / id_rsa.pub … done! “Heroku”gem已被废弃,取而代之的是Heroku Toolbelt,从https://toolbelt.heroku.com下载并安装。;

  1. 重新运行heroku键盘的命令:add

上面的命令不会给出以下输出find现有的公钥: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. 首先,login:herokulogin
  2. 清除所有键:heroku键:清除
  3. 删除.ssh/ folder中的本地文件夹中的所有文件(所有.pub文件和know_host
  4. 再次login:herokulogin – u会提示没有密钥,所以按照屏幕上的说明。

我只想补充说目录不一定是C:\ Users \ [username] \。ssh。 它是您创build公钥的目录。

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

  echo %HOMEPATH% 

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

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

你也应该为root用户生成ssh密钥。

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

它会工作。

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

 cd /home/user/.ssh 

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

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

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

  • 打开terminal并inputdefaults write com.apple.Finder AppleShowAllFiles TRUE
  • killall Finder

下一步:

  • Users/user_name/.ssh/删除所有的文件。
  • ssh-keygen -t dsa打开terminaltypes
  • 然后heroku keys:add ~/.ssh/id_dsa.pub

注意我在Mac OSX 10.7.2 Lion中做了这个。 虽然其他程序也应该是一样的。

我也有这个问题。 我正在使用Mac OSX。 我解决的方法是以pipe理员身份login

sudo su

密码

dmajkic的解决scheme终于帮助了我:

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

这是为我工作。 heroku网站没有被添加到您的已知主机。 去window-other-show view-git-git repositories。 从那里克隆存储库。 一旦你克隆它,删除刚刚创build的存储库,然后从文件菜单中导入它。 这样做是因为在克隆存储库时,它不会将其添加到资源pipe理器视图。 现在你应该有git仓库和资源pipe理器视图。