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

vic*_*ich 848 git deployment heroku public-key

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

git push heroku master
Run Code Online (Sandbox Code Playgroud)

但是得到以下错误:

Permission denied (publickey).
fatal: The remote end hung up unexpectedly
Run Code Online (Sandbox Code Playgroud)

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

seb*_*eli 1470

您必须将公钥上传到Heroku:

heroku keys:add ~/.ssh/id_rsa.pub
Run Code Online (Sandbox Code Playgroud)

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

heroku keys:add
Run Code Online (Sandbox Code Playgroud)

清除以前的所有密钥:

heroku keys:clear
Run Code Online (Sandbox Code Playgroud)

要显示所有现有密钥:

heroku keys
Run Code Online (Sandbox Code Playgroud)

编辑:

以上似乎对我没有用.我搞乱了HOME环境变量,所以SSH在错误的目录中搜索密钥.

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

ssh -vT git@heroku.com
Run Code Online (Sandbox Code Playgroud)

这将显示以下(样本)行

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.
Run Code Online (Sandbox Code Playgroud)

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. 关于如何永久设置Unix环境变量的答案

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

  • 如果你没有公钥,heroku会提示你自动添加一个公钥,它可以无缝地工作.只需使用:`heroku keys:add` (92认同)
  • 不适合我.我不得不撤销我的旧密钥,然后让heroku应用程序为我生成并上传一个新密钥.请参阅Lithium提供的有关如何执行此操作的链接. (31认同)
  • 也可以尝试`SSH-凯基-t RSA -C"your_email@youremail.com"`如果仍然有错误,创建另一个file.pub并使用一个在这个答案推荐的命令 (13认同)
  • 只是给人们说它不起作用的说明.你需要确保你已经有一个ssh公钥.http://help.github.com/mac-set-up-git/有关使用mac执行此操作的详细信息. (9认同)
  • 在添加到heroku之前,您可能必须创建/重新创建密钥.http://www.whatibroke.com/?p=284曾为我工作过Windows 7. (3认同)

Onu*_*han 145

我有同样的问题,下面的步骤对我有用,

->heroku login
Run Code Online (Sandbox Code Playgroud)

abc@gmail.com和密码

->cd C:\Users\yourusername\.ssh    (OR for cygwin shell ->cd ~/.ssh)
Run Code Online (Sandbox Code Playgroud)

->ssh-keygen -t rsa -f id_rsa

如果要求任何密码不使用空白,请填写密码,但不要忘记密码.

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

$ ssh-add
Run Code Online (Sandbox Code Playgroud)

它和heroku

->heroku keys:add "id_rsa.pub"
Run Code Online (Sandbox Code Playgroud)

将目录更改为工作空间

->git clone git@heroku.com:stark-dawn-1234.git -o heroku
Run Code Online (Sandbox Code Playgroud)

使用您在上面设置的密码.


其实我也删除下面的文件,但不确定它们是不是,

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

  • 这解决了我.我想原因是,我有一个来自`Github for Windows`的'github_rsa'文件,但没有id_rsa文件. (21认同)
  • 这对我有用.如果你在Windows上使用Git Bash,那么密钥必须命名为id_rsa.pub,否则即使你向Heroku上传其他东西也不行. (3认同)

小智 90

这个问题困扰了我几天.

这可能有所帮助.

1)找出你现在在Heroku中有哪些键.

$ heroku keys
=== 1 key for joe@example.com
ssh-dss AAAAB8NzaC...DVj3R4Ww== joe@workstation.local
Run Code Online (Sandbox Code Playgroud)

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

$ sudo vim ~/.ssh/config
Run Code Online (Sandbox Code Playgroud)

使用此信息进行编辑

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
Run Code Online (Sandbox Code Playgroud)

  • 这对我来说也是有用的,没有别的了!但是在最后一行的"User"之前应该有一个换行符.此外,它抱怨了`#`评论,所以我就把它删除了. (3认同)
  • 确保"IdentityFile"具有非公共文件(如上所述),而不是公共文件.出于某种原因,我有公共版本,它抛出一个错误,说文件的权限是不正确的. (2认同)

小智 61

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

  • Heroku从未促使我添加一个.所以我必须先做ssh-keygen.这有帮助.谢谢! (2认同)

Ste*_*liu 35

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

heroku keys:clear
heroku keys:add
Run Code Online (Sandbox Code Playgroud)

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


小智 31

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

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

我希望这有帮助.

  • 不要那样做!这是因为HOME是空的,它默认为当前的exe目录.如果有人设法以访客身份登录,他可以获取您的私钥.将高级用户设置中的HOME设置为%HOME_DRIVE %% HOMEPATH%,(或Win7上的C:\ Users\<用户名>)并复制.ssh目录. (12认同)
  • 对我来说,它是c:\ msysgit\.ssh.我刚创建了一个目录连接到我个人文件夹中的.ssh文件夹. (2认同)

小智 29

这是我的解决方案:

ssh-add ~/.ssh/my_heroku_key_rsa
Run Code Online (Sandbox Code Playgroud)


Max*_*nce 15

分享我的经验:

Git(我自己的安装)正在寻找名为'id_rsa'的密钥.

所以我尝试将我的密钥重命名为'id_rsa'和'id_rsa.pub'并且它有效.

顺便说一句,我确信还有另一种方法可以做到这一点但我看起来并没有更深入.

  • 为我工作(Windows 7 64位).我安装了GitHub for Windows,并将密钥命名为GitHub_rsa.有没有办法指定Git应该使用哪个键? (3认同)

小智 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
Run Code Online (Sandbox Code Playgroud)

这应该工作.


Sau*_*oss 7

我尝试了每一种可能的组合,试图让它发挥作用,我自杀了3天 - 我终于尝试制作一个DSA密钥而且它有效.

如果它不适合您,请尝试DSA而不是RSA.

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

  • 不知道为什么这个答案值得投票......它为我解决了问题,它提出了问题的答案. (3认同)

Hru*_*esh 6

在Windows 7,64位上,上面的解决方案(Onur Turhan)对我有用,稍微改动如下

C:\Users\MyName > heroku login
Run Code Online (Sandbox Code Playgroud)

输入电子邮件/密码

C:\Users\MyName >ssh-keygen -t rsa -f id_rsa
Run Code Online (Sandbox Code Playgroud)

这在我的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
Run Code Online (Sandbox Code Playgroud)

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


Tra*_*der 5

一个命令有效:

heroku keys:add
Run Code Online (Sandbox Code Playgroud)

如果它不存在,它将成为一个.


小智 5

在我的机器上安装TortoiseGIT时遇到了这个问题.GIT_SSH从中更改环境变量后

"c:\Program Files\TortoiseGit\bin\TortoisePlink.exe"
Run Code Online (Sandbox Code Playgroud)

"c:\Program Files (x86)\Git\bin\ssh.exe"
Run Code Online (Sandbox Code Playgroud)

并使用ssh-keygen和本教程keys:add,它的工作原理!