Heroku“权限被拒绝(公钥)致命:无法从远程存储库中读取”问题
Posted
技术标签:
【中文标题】Heroku“权限被拒绝(公钥)致命:无法从远程存储库中读取”问题【英文标题】:Heroku 'Permission denied (publickey) fatal: Could not read from remote repository' woes 【发布时间】:2013-07-11 16:57:02 【问题描述】:我已经连续搜索了好几个小时,以寻找解决我看似容易解决的问题的方法。并不是我的搜索一无所获,而是我的搜索找到了许多不同的解决方案——没有一个奏效。
无论如何,我根本无法从我的 Mac 上的 Heroku 存储库中推送、拉取或获取。每次尝试都会给我(好像在嘲笑我)以下错误:
'权限被拒绝(公钥)。致命:无法从远程读取 存储库。'
我已经尝试(并再次尝试)以多种不同的方式修复它。正如我所说,过去两天我花了很大一部分时间寻找答案。以下是我尝试过的一些事情:
heroku 键:清除后跟 heroku 键:添加 使用“ssh-keygen -t rsa”自行重新生成 ssh 密钥 清除我的 .ssh 目录,然后是 heroku keys:clear,然后生成一个 ssh 密钥 在 heroku 上删除我的应用并重新创建一个(幸运的是那里没有太多)我可以很好地从我的 GitHub 存储库中获取,所以我知道这不是网络连接(ping heroku 也可以)。
作为临时解决方案(我希望不会变成永久解决方案),我已登录到我的 Ubuntu Amazon AWS ec2 实例。从 Heroku 拉出和推入非常完美。出于这个原因,我仍然觉得问题出在我 Mac 上的 ssh 密钥上。两个密钥都显示在我的 Heroku 帐户下。密钥末尾的电子邮件地址重要吗?
编辑:我可以很好地从 GitHub 推送和拉取(但是我没有使用 ssh),那么为什么不使用 Heroku?
在这一点上,我愿意尝试任何事情。谢谢!
【问题讨论】:
您是否为您的 Heroku 密钥设置了密码?我想这(***.com/a/16753800/6309)没有帮助?或仔细检查***.com/a/16753800/6309 可悲的是它仍然拒绝工作。 heroku 维护时有时会发生这种情况:status.heroku.com 【参考方案1】:我知道这已经得到了回答。但我想添加我的解决方案,因为它可能对未来的其他人有所帮助..
常见的关键错误是:Permission denied (publickey)
。您可以使用keys:add
通知 Heroku 您的新密钥来解决此问题。
简而言之,请按照以下步骤操作:https://devcenter.heroku.com/articles/keys
首先,如果您没有密钥,您必须创建一个:
ssh-keygen -t rsa
其次你必须将密钥添加到 Heroku:
heroku keys:add
【讨论】:
感谢 kris,来自未来的某个人 :) 这对我有用 heroku 键:添加是我的教程错过了我猜...谢谢! :) 只有在你还没有密钥的情况下才需要生成密钥,在我的情况下,我已经有了密钥,只需将密钥添加到 heroku 第一个是不必要的。如果您没有密钥,heroku keys:add
将帮助您创建一个。
如果没有生成RSA
,则运行ssh-keygen -t rsa
,否则heroku keys:add
就足够了【参考方案2】:
我只是想分享一下我找到了自己问题的答案。
写出我的问题让我更加清楚,我进一步调查了我认为问题出在哪里:ssh 密钥
事实证明我是对的。问题不在于密钥本身,而在于我没有将其添加到本地 Mac 的已知 ssh 密钥列表中。因此,即使我的 Heroku 帐户上传了正确的密钥,我的 Mac 也无法对其进行身份验证,因为它在我的计算机上找不到该密钥。解决方案?
ssh-add ~/.ssh/id_rsa
#and, to confirm it's been added to the known list of keys
ssh-add -l
我想感谢 https://help.github.com/articles/error-permission-denied-publickey 提供的良好参考。
【讨论】:
感谢您的反馈,比我最初的评论更准确地反映了您的情况。 +1 在 Windows 上,需要启动Git Bash
(右键单击文件夹),然后启动 ssh-agent
,这可以通过运行 `ssh-agent`
(注意反引号)然后添加键,如上所述。我每次启动Git Bash
/ssh-agent
时都必须这样做,它忘记了添加了什么。
我这样做了,但还是不行。我最终不得不将一个名为 HOME 的环境变量添加到我的 .ssh 文件夹所在的目录中
谢谢 - 永远不会想到这一点!
这解决了我的问题,而不是更高的投票答案,谢谢:)【参考方案3】:
我遇到了完全相同的错误(在 Windows 7 上),原因不同。我以不同的方式解决了它,所以我想我会在这里为其他人添加原因和解决方案。
尽管错误似乎指向 heroku,但实际上错误是说"Heroku can't get to the git repository"
。我发誓我在所有服务器上都有相同的密钥,因为我创建了它并同时将它一个接一个地上传。
在花了将近一天的时间后,我意识到因为 git 只向我显示指纹而不是实际的密钥。我无法验证它的密钥是否与我的 HD 或 heroku 上的密钥匹配。我查看了已知的 hosts 文件并猜测是什么......它显示了每个服务器的密钥,我能够清楚地看到 git 和 heroku 公钥不匹配。
1) 我删除了我的密钥文件夹中的所有文件,使用他们网站的 github 中的密钥,以及使用 git bash 和命令 heroku keys:clear
的 heroku 中的密钥
2) 按照github的指示here生成新的密钥对并将公钥上传到git
3) 使用git bash-
heroku keys:add
将相同的密钥上传到heroku。
现在git push heroku master
有效。
真是一场噩梦,希望这对某人有所帮助。
布莱恩
【讨论】:
在看到你的帖子之前绞尽脑汁。一旦我使 git 和 heroku 键相同,一切都很好。但不明白为什么它们需要相同。 感谢您在这个问题上花费了很长时间的回答 非常有用的 git 文档链接,一切正常 经过几天的尝试,这对我有用。我很惊讶 Heroku 能在这样一个令人讨厌的可用性问题上继续经营下去。应该有更简单的方法来做到这一点。 谢谢。为我工作;只有一件事:在 github 链接中某处说要做“ssh-add”。我有一个问题,但我在这里找到了解决方案:***.com/questions/17846529/…【参考方案4】:我遇到的问题是我的 GitHub 帐户只使用了 https。我需要确保我的 GitHub 帐户已设置为 ssh 访问,并且 GitHub 和 heroku 都使用相同的公钥。这些是我采取的步骤:
导航到 ~/.ssh 目录并删除 id_rsa 和 id_rsa.pub(如果它们在那里)。我从新密钥开始,虽然可能没有必要。
$ cd ~/.ssh
$ rm id_rsa id_rsa.pub
按照gitHub上的步骤到generate ssh keys
登录 Heroku,创建一个新站点并添加您的公钥:
$ heroku login
...
$ heroku create
$ heroku keys:add
$ git push heroku master
【讨论】:
【参考方案5】:我在 linux ubuntu 上遇到了同样的情况,只是修复了它,似乎操作系统在 /root/.ssh/ 和 home/user/.ssh/ 目录之间混淆了,我所做的是:
-
从根目录和主/用户 .shh 目录中删除了所有密钥。
generated a new key一定要注意创建路径(/home/you/.ssh/id_rsa)或(/root/.ssh/id_rsa)
检查heroku键
heroku keys
如果那里的键清除heroku keys:clear
heroku keys:add
现在在这里,如果 heroku 找不到密钥并要求生成一个正确的不,这意味着您遇到与我相同的问题,请执行像这样的添加命令 heroku keys:add /root/.ssh/id_rsa.pub
您将添加的路径将成为你在第 2 步中得到的那个。
立即尝试git push heroku master
【讨论】:
【参考方案6】:我在 Windows 8 上的方式
将带有 ssh-keygen 的目录添加到系统 PATH 变量中,通常为 C:\Program Files (x86)\Git\bin
打开CMD,进入C:\Users\Me\
生成 SSH 密钥ssh-keygen -t rsa
输入保存密钥的文件(//.ssh/id_rsa):.ssh/id_rsa (将默认的错误路径更改为 .ssh/somegoodname_rsa)
Add the key to Herokuheroku keys:add
从列表中选择一个创建的密钥
进入你的app目录,写一些漂亮的代码
初始化一个 git repo git init
git add .
git commit -m 'chore(release): v0.0.1
Create Heroku applicationheroku create
部署您的应用git push heroku master
打开您的应用heroku open
【讨论】:
【参考方案7】:有类似的问题,并尝试了很多东西。最终对我有用的是在 Windows 上安装 Gnu (https://github.com/bmatzelle/gow/releases),并确保它使用的是该目录中的 ssh 工具,而不是使用 Git 的工具。一旦安装了测试(确保它在你的环境 PATH 中它在 Git\bin 之前)
C:\Git\htest2>which ssh
C:\Program Files (x86)\Gow\bin\ssh.BAT
我使用了这里描述的腻子和选美:http://rubyonrailswin.wordpress.com/2010/03/08/getting-git-to-work-on-heroku-on-windows-using-putty-plink-pageant/
将密钥发送到 heroku 后(heroku 密钥:添加 c:\Users\Person.ssh\id_rsa.pub),使用
ssh -v <username>@heroku.com
并确保您的堆栈显示使用 Putty - 即工作堆栈:
Looking up host "heroku.com"
Connecting to 50.19.85.132 port 22
Server version: SSH-2.0-Twisted
Using SSH protocol version 2
**We claim version: SSH-2.0-PuTTY_Release_0.62**
Using Diffie-Hellman with standard group "group1"
Doing Diffie-Hellman key exchange with hash SHA-1
Host key fingerprint is:
ssh-rsa 2048 8b:48:5e:67:0e:c9:16:47:32:f2:87:0c:1f:c8:60:ad
Initialised AES-256 SDCTR client->server encryption
Initialised HMAC-SHA1 client->server MAC algorithm
Initialised AES-256 SDCTR server->client encryption
Initialised HMAC-SHA1 server->client MAC algorithm
Pageant is running. Requesting keys.
Pageant has 1 SSH-2 keys
Using username "*--ommitted for security--*".
**Trying Pageant key #0**
Authenticating with public key "rsa-key-20140401" from agent
Sending Pageant's response
Access granted
Opened channel for session
Server refused to allocate pty
Server refused to start a shell/command
FATAL ERROR: Server refused to start a shell/command
之前运行但失败的一个:
C:\Git\htest2>ssh -v <username>@gmail.com@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/Users/Person/.ssh/identity type -1
debug1: identity file /c/Users/Person/.ssh/id_rsa type 1
debug1: identity file /c/Users/Person/.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/Users/Person/.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/Users/Person/.ssh/identity
debug1: Offering public key: /c/Users/Person/.ssh/id_rsa
debug1: Server accepts key: pkalg ssh-rsa blen 277
debug1: Trying private key: /c/Users/Person/.ssh/id_dsa
debug1: No more authentication methods to try.
Permission denied (publickey).
【讨论】:
只是说这是使用 Windows 8 (8.1)。似乎 GoW ssh 工具也是关键,因为我能够在没有腻子的情况下使用它,并使用 ssh-keygen。【参考方案8】:您需要通过键入以下内容来创建一个新的 ssh 密钥 - ssh-keygen -t rsa
然后你需要添加: - heroku 键:添加
如果你输入 - heroku 打开
问题已经解决了。
反正对我有用,你可以试试...
【讨论】:
【参考方案9】:我遇到了同样的错误,因为我有 4 个 ssh-key,所以我尝试了以下操作:
ssh-keygen -t rsa
heroku keys:add
然后,显示四个选项:
1) github_rsa.pub
2) id_boot2docker.pub
3) id_rsa.pub
4) sshkey.pub
我选择3),最新的一个
然后,我修复错误。
【讨论】:
【参考方案10】:我用这个方法来解决这个问题 也许你可以试试
“启用 ssh 代理”
-
下载 git
http://git-scm.com/
安装它
启用 ssh 代理
C:\Program Files\Git\cmd
启动 ssh 代理
启用代理后消息消失 希望对你有帮助
【讨论】:
【参考方案11】:我想添加另一个解决方案,因为我在这里没有看到它。我的问题是 heroku 链接到了错误的 url(因为我一直在玩弄 url 名称)。编辑远程 url 解决了我的问题:
git remote set-url heroku <heroku-url-here>
【讨论】:
【参考方案12】:我有同样的问题。正如大家所说,我试图重置我的密钥,但它仍然没有奏效。因为是因为我重命名了应用程序。
所以我所做的是重置我的密钥并从控制台重命名应用程序。检查此问题以获取更多信息:Heroku push app problem
【讨论】:
【参考方案13】:如此简单的解决方案,转到 c:/Users/user_name/.ssh/ 并删除所有 pub/private 密钥对,这样 heroku 将为您生成密钥。
【讨论】:
【参考方案14】:我遇到了一个类似的无法解决的 heroku ssh 错误。
作为一种解决方法,我使用了新的 heroku http-git 功能(“heroku”远程而不是 ssh 的 http 传输)。详情在这里:https://devcenter.heroku.com/articles/http-git
(短版:如果您的项目已经设置了标准方式,请运行 heroku git:remote --http-init 将“heroku”远程更改为 http。)
如果您没有时间修复/解决 ssh 问题,这是一个很好的快速解决方法。
【讨论】:
就我而言,问题似乎与 ssh 远程路径中的“:”有关。 (适用于 Windows 的 Git 1.9.4。)由于某种原因 ssh://git@host:repo 失败并显示“致命:无法从远程存储库读取”,而 ssh://git@host/repo 成功。以上是关于Heroku“权限被拒绝(公钥)致命:无法从远程存储库中读取”问题的主要内容,如果未能解决你的问题,请参考以下文章
heroku create ENOTFOUND: getaddrinfo ENOTFOUND api.heroku.com api.heroku.com:443
Heroku:“heroku ps:exec”和“heroku run bash”有啥区别?
如何将heroku cedar-14堆栈应用程序升级到最新的heroku堆栈(即,升级到heroku 18)
heroku 在构建脚本中失败,但 heroku 本地网络很好