部署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
的HOME
path是C:\Users\UserName
)
要查看您当前的主目录,请执行以下操作: echo $HOME
或echo %HOME%
(Windows)
要正确设置您的HOME
目录(正确地指的是.ssh
目录的父目录,以便ssh可以在正确的目录中查找关键字)引用这些链接:
-
SO回答如何永久设置Unix环境variables
-
所以有关ssh寻找在错误的目录中的键和解决scheme相同的问题。
我有同样的问题,下面的步骤为我工作,
->heroku login
->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-keygen
和keys:add
,它的作品!
上面给出的答案可以工作,但是发现在工作之前我需要做一些额外的步骤。
- 我删除了所有的id_rsa *文件,并使用本指南生成了一个新的SSH。
- 然后,我摧毁了heroku应用程序。 删除了〜/ .heroku / credentials文件。
- 'heroku创build'命令(并且由于凭证文件被删除,它会提示您input您的电子邮件/密码。
- 最后input'heroku keys:add',它会上传默认的〜/ .ssh / id_rsa.pub文件。
- 有用! 那么…. 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键。 所以这里是我遵循的步骤来解决这个问题
- 进入“文档和设置”文件夹下的.ssh目录,并删除了git集线器密钥
- 运行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下载并安装。;
- 重新运行heroku键盘的命令:add
上面的命令不会给出以下输出find现有的公钥:C:/ Documents and Settings / Admin / .ssh / id_rsa.pub上传SSH公钥C:/ Documents and Settings / Admin / .ssh / id_rsa.pub完成
- 现在使用git push heroku master
对于我来说,使用上述步骤解决了问题,并能够在云上部署应用程序。
我遇到了同样的问题。 以下步骤应该有所帮助:
- 首先,login:herokulogin
- 清除所有键:heroku键:清除
- 删除
.ssh/ folder
中的本地文件夹中的所有文件(所有.pub
文件和know_host
) - 再次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并input
defaults 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理器视图。