I am new to Rails, and I was trying to deploy a very simple app to Heroku. This is the second app that I deploy, and the first one I was able to do it just fine. However I am having some issues with this one. Whenever I "git push heroku master", I get this error:
! Your key with fingerprint xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx is not authorized to >access my_heroku_app. fatal: The remote end hung up unexpectedly
I have tried to manage my keys after logging in heroku. If I type in my console "heroku keys", then I get:
No keys for myemailaddress.
However, If I run the comand "heroku keys:add" I get
Found existing public key: /Users/michele/.ssh/id_rsa.pub Uploading ssh public key /Users/michele/.ssh/id_rsa.pub ! Fingerprint already exists. Please use one ssh key per Heroku account
Please help me! This is soo frustating, I have no idea what's wrong! Thank you
I had the same problem, I followed this post and others of the same kind without success :-((
Finally, I found the solution: I had to add my new rsa identity in my machine!
So, first of all I created a new rsa key:
ssh-keygen -t rsa -C "giordano.scalzo[at]gmail.com" -f ~/.ssh/id_rsa_heroku
then added it to my machine
ssh-add ~/.ssh/id_rsa_heroku
and, finally, to Heroku
heroku keys:add ~/.ssh/id_rsa_heroku.pub
After that,
git push heroku master
worked like a charm!
Hope this helps.
I, too have multiple keys and multiple heroku accounts, so I come across this problem every few months. As mentioned Giordano Scalzo, Tom Carchrae, and user664833, the main problem is ssh-agent, which you control using the ssh-add
command. The man page (man ssh-add
) is actually pretty clear and concise, so check it out.
You can list all the keys that ssh-agent knows about with:
ssh-add -l
You can delete all the keys that ssh-agent knows about with:
ssh-add -D
Or delete a specific key with
ssh-add -d ~/.ssh/id_rsa_example_key_file_use_your_own
Don't worry! You aren't actually deleting the keys, only changing which ones ssh-agent automatically tries to use, for example, when you try to push to heroku. It's easy to add and delete keys as needed, so for me, when I get frustrated by this problem, the easiest way to fix it is to delete all the keys and add back in only the one I want to use at the moment.
ssh-add -D
ssh-add ~/.ssh/id_rsa_example_use_this_one_i_mean_it
Your computer has an SSH key, but that SSH key is associated with another Heroku account.
If you need to use both accounts for different applications on the same computer you should make a new SSH key on your machine and upload it to Heroku:
$ ssh-keygen
Make sure to save it as '/Users/User/.ssh/new_id_rsa.pub' when the prompt asks you.
$ heroku keys:add /Users/User/.ssh/new_id_rsa.pub
You then need to add an alternate host for heroku.com
to your ~/.ssh/config
:
Host heroku-alt
HostName heroku.com
IdentityFile ~/.ssh/new_id_rsa
And then update the .git/config
in your project to use the host alias:
[remote "heroku"]
url = git@heroku-alt:myapp.git
fetch = +refs/heads/*:refs/remotes/heroku/*
By choosing between heroku
and heroku-alt
in the remote of the .git/config
files of specific projects you can manage which projects use which credentials.
Host heroku-alt not found: 3(NXDOMAIN)
. I'm putting this in terminal on Mountain Lion. ~/.ssh/config
doesn't exist either, just a bunch of .pub
files and one called known_hosts
. And ideas?
Host
, HostName
, and the IdentityFile
lines. It should then work fine.
Here's a very clear explanation that is lacking from ther Heroku documentation or other answers to the question. At least all the info doesn't seem to appear in any one place. It also let's you understand the problem in a way that the accounts tool doesn't.
Heroku identifies you in 2 ways:
The first is in .git/config
[heroku]
account = acccount_name
This seems to let you perform basic operations using heroku
The second way heroku identifies you is by any operation that uses ssh (git push). Heroku will identify you by your ssh key, as stated here: https://devcenter.heroku.com/articles/keys
This keypair is used for the strong cryptography and that uniquely identifies you as a developer when pushing code changes.
So each heroku account that you work on will have to send a different key to heroku when using ssh. Follow any tutorial to create your ssh keys.
The key is getting SSH to use different keys for each Heroku account. How do you do configure this? You'll need to do 2 things:
1) You'll need to make a 'dummy' domain that your .ssh/config will intercept and reconfigure. This will tell ssh the 'actual' domain you want, and which special ssh key to use.
Host heroku.my_unique_key
HostName heroku.com
IdentityFile ~/.ssh/identity.heroku.my_unique_key
IdentitiesOnly yes
2) Change your .git/config to use that when using git push. Instead of heroku.com, use the dummy domain you set in your .ssh/config
[remote "heroku"]
url = git@heroku.com.git
[remote "heroku"]
url = git@heroku.my_unique_key:myapp.git
That's it :) A bit complicated and a bit simple at the same time. It has taken me 3 years of banging my head against the wall and trial and error to discover this info. It should be clearly documented somewhere, but at least it's a start.
youn will need to create new keys and add those
specify a new file name after running
ssh-keygen
then (in my case)
heroku keys:add /home/alex/.ssh/alex_heroku_rsa.pub
I have the same issue last week. This linked helped me out. I hope it helps you out a little. http://devcenter.heroku.com/articles/keys
In my case, heroku keys
already had the correct key listed. So, all I had to do was run ssh-add /path/to/that/key
and then everything started working fine.
I also have two Heorku accounts and as a work-around I "invited" my main account (the one whose key is used automatically by Heroku) as a collaborator to my project.
Just wan´t to add the solution for Windows users.
First download "Putty Key generator" Create a key with it OBS you need to move your mouse ower the blank area to generate randomness. Save your keys, just remeber to rename your key to [name].pub Run heroku keys:add in terminal!
In my case the problem was the ssh version I was using. I just set the GIT_SSH environment variable to another ("GIT_SSH=/usr/bin/ssh") and everything worked OK for me.
Success story sharing
heroku logout
, logged in to the other account, and deleted the default RSA key from that account. After that I was able to push with this newly-generated key.ssh-add ~/.ssh/id_rsa_heroku
though mine wasssh-add ~/.ssh/identity.heroku.foo
because I'm also using https://github.com/ddollar/heroku-accounts (a multiple accounts manager for Heroku).