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

git push heroku master
Permission denied (publickey).
fatal: The remote end hung up unexpectedly

答案

您必须将公共密钥上传到 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 中~指的是 Windows heroku keys:add ~/.ssh/id_rsa.pub 中的C:\Users\UserNameHOME路径

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

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

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

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

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

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

这个问题困扰了我几天。

这可能会有所帮助。

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

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

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

heroku keys:clear
heroku keys:add

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

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

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

我希望这有帮助。

这是我的解决方案:

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

这应该工作。

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

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

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