有很多堆文章引用了与我相同的错误消息。
我在另一台计算机上浏览了整个heroku设置文档,一切都运行良好。不知道为什么这个不起作用,但我需要它。
当我跑步时:
> git push -v heroku master
Pushing to git@heroku.com:lit-tor-7969.git
Permission denied (publickey).
fatal: The remote end hung up unexpectedly
Stack上的所有解决方案都涉及重置ssh密钥,我相信ssh密钥很好。我在Mac OSX上运行:
heroku keys:clear
heroku keys:add
因此我觉得git使用/Users/bishopz/.ssh键而不是我在存储库文件夹中手动生成的键。
除了以下答案之外,本文似乎提供了很多见解: Cannot push to Heroku because key fingerprint
我尝试完全删除.ssh目录。我跑了
heroku keys:clear
ssh-add -D #to remove all ssh identities
ssh-keygen -t rsa -C "email@gmail.com" -f ~/.ssh/id_rsa_heroku
ssh-add ~/.ssh/id_rsa_heroku
heroku keys:add ~/.ssh/id_rsa_heroku.pub
git push heroku master
现在得到:
! Your key with fingerprint 27:5f:64:4e:2e:f0:41:5b:62:a9:95:d2:02:df:27:85 is not authorized to access lit-tor-7969.
fatal: The remote end hung up unexpectedly
对
的回应ssh -vvv git@heroku.com
现在是:
debug1: Host 'heroku.com' is known and matches the RSA host key.
debug1: Found key in /Users/bishopz/.ssh/known_hosts:1
debug1: ssh_rsa_verify: signature correct
debug1: Offering RSA public key: /Users/bishopz/.ssh/id_rsa_heroku
debug1: Server accepts key: pkalg ssh-rsa blen 279
debug1: Authentication succeeded (publickey).
Authenticated to heroku.com ([50.19.85.132]:22).
任何帮助表示赞赏,如果有人能发布适合我的答案,我会开始新的赏金。
答案 0 :(得分:7)
这个问题并不是关于git而是关于ssh。 :)
Heroku使用git,它使用ssh,只允许通过publickey进行身份验证。 (但我认为这已经很明确了。)
heroku keys:add
会将公钥发送到heroku。除非您指定显式密钥,否则它将使用~/.ssh/id_[rd]sa.pub
。
要成功验证,您需要提供匹配的私钥。除非另有说明,否则ssh将使用~/.ssh/id_[rd]sa
,但如果权限太松,它将拒绝读取它。 (有关详细信息,请参阅man ssh
部分文件。)
检查权限是否正常的简单方法是将密钥添加到代理:
ssh-add ~/.ssh/id_[rd]sa
这应该将密钥添加到代理(使用ssh-add -L
验证)或抱怨错误的权限。 (如果首先没有代理运行,您可以使用'ssh-agent bash'启动代理。)
将密钥添加到代理后,代理将负责身份验证,并且您的git应该能够正常连接。 :)
答案 1 :(得分:4)
好的,我能够解决它。其中一些答案很有帮助。似乎发生了两件事。
首先,基于this article,ssh键已经混淆了。这是通过删除.ssh目录解决的(当然这删除了使用.ssh的其他内容的所有凭据,但是可以在以后重新创建):
heroku keys:clear
ssh-add -D #to remove all ssh identities
ssh-keygen -t rsa -C "email@gmail.com" -f ~/.ssh/id_rsa_heroku
ssh-add ~/.ssh/id_rsa_heroku
heroku keys:add ~/.ssh/id_rsa_heroku.pub
其次,基于对this article的回答,在对ssh密钥进行故障排除的过程中,应用名称发生了某些变化。必须在/repository_folder/.git/config
中手动编辑应用名称要获取正确的应用名称,我在网上登录了heroku.com,然后更新了配置文件:
它包含
[remote "heroku"]
url = git@heroku.com:my_new_app_name.git
fetch = +refs/heads/*:refs/remotes/heroku/*
感谢所有发布的建议!我很高兴最终能够去一个新的应用程序!
- UPDATE -
每次重新启动计算机时都必须重新运行此命令。我可以将它添加到我的.profile或其他任何内容,但我认为值得注意。
答案 2 :(得分:2)
取决于您的设置。 您可能在〜/ .ssh /目录中有一个配置文件,用于设置在推送到heruko时要用作公钥的文件。
示例(~/.ssh/config
):
Host 127.0.0.1 #Use Heroku's IP
IdentityFile ~/.ssh/use_this_key
如果是这种情况,请更改〜/ .ssh / config文件中的设置
干杯
答案 3 :(得分:0)
.ssh
目录和存储库目录的权限均为555
ssh连接的重要性是:group and other permissions:
/home/user/.ssh
/home/user
/home
(用主目录的实际路径替换/ home / user)
我们的想法是.ssh
及其所有父目录的组和其他属性权限必须不可写。
555
适用于.ssh,虽然700 is recommended
检查其父目录:755或555一直到/
(没有'2','3'或'6',表示组或其他的可写目录。)