856

I'm attempting to deploy my code to heroku with the following command line:

git push heroku master

but get the following error:

Permission denied (publickey).
fatal: The remote end hung up unexpectedly

I have already uploaded my public SSH key, but it still comes up with this error.

5
  • did sebarmeli's solution work for you? I'm not using an rsa key named "id_rsa.pub" and just had enter "heroku keys:add ~/.ssh/<rsa_key_filename>.pub" Commented Oct 5, 2011 at 0:40
  • 6
    I had this problem almost a year ago and the proposed solution at the time didn't exactly work for me, but I figured it out somehow (at this point I don't remember what I did exactly). Sebarmeli answered a while after I no longer needed assistance, although it seems his answer is quite popular among those that experienced a similar problem. If it makes people happy, I'll choose his answer as the correct one.
    – vich
    Commented Oct 5, 2011 at 1:35
  • 3
    The following line solved the problem for me. heroku accounts:set youraccount
    – Mingming
    Commented Jan 14, 2012 at 16:47
  • Seems some heroku services are down today-- be sure to check their site for issues if you're debugging this! Commented Sep 4, 2013 at 17:04
  • I had the same problem, all I needed to do is heroku login then write email and password and try again. Commented Jun 6, 2014 at 23:20

34 Answers 34

1483

You have to upload your public key to Heroku:

heroku keys:add ~/.ssh/id_rsa.pub

If you don't have a public key, Heroku will prompt you to add one automatically which works seamlessly. Just use:

heroku keys:add

To clear all your previous keys do :

heroku keys:clear

To display all your existing keys do :

heroku keys

EDIT:

The above did not seem to work for me. I had messed around with the HOME environment variable and so SSH was searching for keys in the wrong directory.

To ensure that SSH checks for the key in the correct directory do :

ssh -vT [email protected]

Which will display the following ( Sample ) lines

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

From the above you could observe that ssh looks for the keys in the /c/Wrong/Directory/.ssh directory which is not where we have the public keys that we just added to heroku ( using heroku keys:add ~/.ssh/id_rsa.pub ) ( Please note that in windows OS ~ refers to the HOME path which in win 7 / 8 is C:\Users\UserName )

To view your current home directory do : echo $HOME or echo %HOME% ( Windows )

To set your HOME directory correctly ( by correctly I mean the parent directory of .ssh directory, so that ssh could look for keys in the correct directory ) refer these links :

  1. SO Answer on how to set Unix environment variable permanently

  2. SO Question regarding ssh looking for keys in the wrong directory and a solution for the same.

15
  • 31
    Didn't work for me. I had to revoke my old key and then let heroku app generate and upload a new one for me. See the link on how to do this provided by Lithium. Commented Oct 26, 2011 at 22:49
  • 9
    just a note to people saying it didn't work. you need to make sure you have an ssh public key already made. help.github.com/mac-set-up-git for more info on doing so with mac.
    – Ryan
    Commented Dec 28, 2011 at 0:08
  • 93
    if you don't have a public key, heroku will prompt you to add one automatically which works seamlessly. Just use: heroku keys:add
    – vansan
    Commented Jul 9, 2012 at 15:55
  • 13
    Also try ssh-keygen -t rsa -C "[email protected]" if still having the error, to create another file.pub and use that one in the recommended command in this answer
    – tomasdev
    Commented Oct 23, 2012 at 4:01
  • 3
    You may have to create/re-create a key before adding to heroku. whatibroke.com/?p=284 has worked for me for Windows 7. Commented May 24, 2013 at 13:48
148

I had the same issue, the steps below worked for me,

->heroku login

[email protected] & password

->cd C:\Users\yourusername\.ssh    (OR for cygwin shell ->cd ~/.ssh)

->ssh-keygen -t rsa -f id_rsa

if asks any passphrase don't use blank, fill with a passphrase,but not forget it.

After generating the key you need to add it, like so

$ ssh-add

and it to heroku

->heroku keys:add "id_rsa.pub"

change directory to workspace, than

->git clone [email protected]:stark-dawn-1234.git -o heroku

use passphrase that you set above.


Actually i also remove files below, but not sure that they are imp,

C:\Users\yourusername.heroku\credientals and C:\Users\yourusername.ssh\known_hosts

10
  • 21
    This solved it for me. I think the reason was, I had a 'github_rsa' file from Github for Windows, but no id_rsa file.
    – msiemens
    Commented Jul 4, 2012 at 11:40
  • Didn't work with Openssl installer. I had to install CopSSH to get the ssh-keygen.exe program.
    – djangofan
    Commented Jun 14, 2013 at 0:54
  • On Windows 7, I had to do this on git bash command prompt in order to run ssh-keygen. thanks.
    – Rots
    Commented Jun 27, 2013 at 9:47
  • This worked for me and seems to be the best solution. The better question is why I have to repeat this every other day Commented Jul 25, 2013 at 1:43
  • 3
    This worked for me. If you're using Git Bash on Windows, the key MUST be named id_rsa.pub or it won't work, even if you upload something else to Heroku.
    – Kiv
    Commented Aug 1, 2013 at 19:46
92

This problem was messing with me for a few days.

This might help.

1) Find out what keys you have in Heroku now.

$ heroku keys
=== 1 key for [email protected]
ssh-dss AAAAB8NzaC...DVj3R4Ww== [email protected]

2) Build a ~/.ssh/config file:

$ sudo vim ~/.ssh/config

Edit with this info

Host heroku.com
Hostname heroku.com 
Port 22 
IdentitiesOnly yes 
IdentityFile ~/.ssh/ssh-dss # location and name of your private key
TCPKeepAlive yes 
User [email protected]
8
  • 3
    This worked for me as well, after nothing else did! However there should be a line break before User in that last line. Also, it complained about the # comment, so I just removed it.
    – Erik J
    Commented Aug 7, 2012 at 21:32
  • 2
    Make sure that the "IdentityFile" has the non public file (like above), not the public one. For some reason mine had the public version and it was throwing an error saying the permissions for the file were incorrect.
    – Kevin K
    Commented Sep 26, 2012 at 13:31
  • Adding this host info to my config file solved the problem for me. I created a heroku rsa key and the default permissions on heroku.pub threw an error when I tried to git push. I had to chmod 600 heroku.pub and then when I pushed it worked. Commented Oct 12, 2012 at 2:53
  • 1
    IdentityFile ~/.ssh/ssh-dss is the path to the private key. You want to enter your private key here, not your public key. Commented Apr 24, 2013 at 21:43
  • 1
    This answer is what put me over the top. I am running windows 7 64 bit. There are a number of other steps that helped such as: ssh-keygen -t rsa -f id_rsa then deleting any heroku keys and adding the one just created: heroku keys:clear heroku keys:add C:\Users\username\.ssh\id_rsa.pub and then slightly modifying the above file to IdentityFile C:/Users/windows_username/.ssh/id_rsa
    – Paul
    Commented Oct 18, 2013 at 2:16
61

Here is the link that explains how to manage your ssh keys: https://devcenter.heroku.com/articles/keys#adding-keys-to-heroku

2
  • 2
    Heroku never prompted me to add one. So I had to do the ssh-keygen first. This helped. Thanks!
    – Kal
    Commented Jan 4, 2013 at 22:26
  • This one worked for me. Generated a new key, in my case overwrite the old one, then choose id_rsa.pub to use with heroku. Thanks
    – jfoutch
    Commented Sep 13, 2013 at 22:49
36

I had the same problem cause i had no public keys, so i did:

heroku keys:clear
heroku keys:add

That will generate a public key and then it works well

1
  • 1
    Still getting the error. i try different things, solve it, then get the same problem the next week... I wonder why Heroku is like this.
    – JGallardo
    Commented Nov 9, 2013 at 7:46
31

If you are a windows user the other solutions here probably won't solve your problem.

I use Windows 7 64-Bit + Git-1.7.7.1-preview20111027 and the solution was to copy my keys from C:\users\user\.ssh to C:\Program Files (x86)\Git\.ssh. That's where this git client looks for the keys when pushing to heroku.

I hope this helps.

4
  • 2
    For me it was c:\msysgit\.ssh. I just created a directory junction to the .ssh folder in my personal folder. Commented Nov 29, 2011 at 2:33
  • Same problem here, but why I don't know. Each time I added keys it displayed that used the keys from my User folder, same with this fix but it worked. Commented Apr 9, 2012 at 11:09
  • 12
    DON'T DO THAT! This works because HOME is empty, and it defaults to current exe dir. If someone manages to logon as Guest, he can get your private key. Set HOME in Advanced User Settings to %HOME_DRIVE%%HOMEPATH%, (or C:\Users\<username> on Win7) and copy .ssh dir there.
    – dmajkic
    Commented May 23, 2012 at 7:43
  • Further to @dmajkic, on Win7 see this Git for Windows Tip for setting the %HOME% environment variable to %USERPROFILE%. Commented Mar 31, 2014 at 21:10
29

This was the solution for me:

ssh-add ~/.ssh/my_heroku_key_rsa
2
  • 1
    Same here. Thank you. Also, make sure your private key has the proper permissions associated to it. chmod 600 ~/.ssh/heroku_rsa Commented Jan 31, 2013 at 7:47
  • thank you - this was my problem as well, and I needed to follow Arnaud's tip as well first.
    – Mike Atlas
    Commented Jun 11, 2013 at 15:40
15

To share my experience :

Git (my own install) was looking for the key named 'id_rsa'.

So I tried to rename my keys to 'id_rsa' and 'id_rsa.pub' and it worked.

Btw, I'm sure there is an other way to do it but I didn't look deeper yet.

1
  • 3
    Worked for me (Windows 7 64bit). I have GitHub for Windows installed, and it names the keys GitHub_rsa. Is there a way to specify which key Git should use?
    – Spongeboy
    Commented Apr 9, 2013 at 13:13
10

If you've already uploaded the key then try to remove the key and then re-upload it with a new key.

 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

this should work.

2
  • Thanks, this worked for me. Altough I used heroku keys:clear instead of heroku keys:remove. Commented Jul 27, 2013 at 15:21
  • 1
    Wrong, Must specify KEY to remove
    – JGallardo
    Commented Nov 9, 2013 at 7:47
7

I killed myself for 3 days trying every possible combination to try to get this to work -- I finally tried making a DSA key instead and it worked.

Try DSA instead of RSA if it's not working for you.

(I'm using Ubuntu 11.10, ruby 1.8.7, heroku 2.15.1)

5
  • 1
    I talked with Heroku support, and they suggested this as a temporary solution. It worked for me, but I'm sure it's not the answer for every case. Commented Feb 7, 2012 at 19:07
  • 3
    Not sure why this answer deserved a down vote... It solved the problem for me, and it suggests an answer to the problem. Commented Feb 27, 2012 at 3:38
  • I had the opposite problem... even though the Heroku dev docs say you can use a DSA key (ssh-dss), I kept getting the 'Permission denied' message until I switched to an RSA key
    – brandonjp
    Commented Mar 11, 2012 at 7:48
  • worked for me. Toggling between dsa and rsa seems to work if you change your keys after heroku create and before git push.
    – Pramod
    Commented Jul 22, 2012 at 16:56
  • and how do I create a DSA key and add it to heroku?
    – coiso
    Commented Mar 14, 2014 at 14:13
6

On Windows 7,64 bit,the above solution (Onur Turhan's) worked for me with slight changes as below

C:\Users\MyName > heroku login

Enter email/password

C:\Users\MyName >ssh-keygen -t rsa -f id_rsa

This generated two files(id_rsa and id_rsa.pub) in my c:\Users\MyName directory (Not in .ssh directory)

heroku keys:add id_rsa.pub
git clone [email protected]:some-heiku-xxxx.git -o heroku

I guess adding the correct "id_rsa.pub" file is the most important.After generating the public key using keygen just verify that you are adding correct key by looking at the time-stamp when it was created.

0
5

One single command works:

heroku keys:add

It will make one if it doesn't exist.

1
  • Downvote, this does not answer in context with the error. I removed existing, created new, and added the keys and still getting the problem. your suggestion of heroku keys:add is not a complete answer.
    – JGallardo
    Commented Nov 9, 2013 at 7:51
5

I had this problem when TortoiseGIT was installed on my machine. After changing the environment variable GIT_SSH from

"c:\Program Files\TortoiseGit\bin\TortoisePlink.exe"

to

"c:\Program Files (x86)\Git\bin\ssh.exe"

and following this tutorial with ssh-keygen and keys:add, it works!

3
  • which tutorial did you follow?
    – eckes
    Commented Aug 15, 2012 at 16:31
  • the one up here from Onur Turhan
    – zooli
    Commented Sep 8, 2012 at 12:36
  • Using ssh provided by Git IS a very good solution. It was really getting complicated understanding plink/pageant/putty here ...
    – Stéphane
    Commented Nov 16, 2012 at 19:39
4

Pushing was working for me and then stopped suddenly.

If the heroku api is experiencing downtime, you will get this error when you try to push.

Check:

https://status.heroku.com/

before freaking out too hard.

0
3

Sequence to follow

$ heroku login
$ ssh-keygen -t rsa
$ heroku keys:add

When executing second statement it would ask for input, just press Enter(return) three times and a key will be added.

1
  • a lot of people had this exact same answer. and does not work as stated.
    – JGallardo
    Commented Nov 9, 2013 at 8:00
2

The above given answer DOES work, but found out I needed to do some extra steps before it worked.

  1. I removed all id_rsa* files and generated a new SSH using this guide.
  2. Then, I destroyed the heroku app. Removed the ~/.heroku/credentials file.
  3. 'heroku create' command (and since the credentials file is removed, it will prompt you for your email/password.
  4. FINALLY type 'heroku keys:add' and it will upload the default ~/.ssh/id_rsa.pub file.
  5. It works! Well.... YMMV but I really do hope this can be some help as I struggled the whole day trying to figure this out! Haha
2

For all those who tried everything mentioned above on Windows 7 and still it didn't work, here is what I've done: - open GitBash.exe from the Git directory C:\Program Files (x86)\Git\ (don't open a command prompt, this won't work). - add the following as mentioned above, but you have to delete the #

Host heroku.com
Hostname heroku.com 
Port 22 
IdentitiesOnly yes 
IdentityFile ~/.ssh/ssh-dss
TCPKeepAlive yes 
User [email protected]

now run git push heroku master and it should work.

1
  • Upvoting this as well. Spent 6 hours with yesterday and don't feel like this is knowledge I care about at all. I can push to github through powershell and command prompt, but only Git Bash works for me for heroku. Now it works every time. I also wind up doing heroku login before git push heroku master. May not be necessary, but for now, it's superstition that keeps me doing it. What nightmare
    – JMDenver
    Commented Feb 17, 2015 at 19:21
1

It sounds like your ~/.ssh/authorized_keys file is not set up correctly. Verify that:

  • It is in the correct path.
  • The permissions of the file are 0600.
  • The permissions of ~/.ssh are 0700.
5
  • I'm fairly new at this stuff so sorry if this is going to sound dumb, but my public SSH key file is just a bunch of characters (standard key gen) with no other information. I acquired this SSH file when I setup git on my computer. I assumed this would be the same public SSH key that I would use to deploy my heroku code. Or does heroku have its own public SSH key that I need to generate?
    – vich
    Commented Nov 24, 2010 at 18:18
  • 1
    Yes, you can reuse your public SSH key for many different hosts. I am not sure exactly how Heroku works, but I can see that my answer doesn't really apply in this case. You might verify that your key was accepted by their web interface. If everything still checks out, try contacting their support team.
    – cdhowie
    Commented Nov 24, 2010 at 18:21
  • Thanks for the advice! I have contacted heroku support. I will update once I have an answer.
    – vich
    Commented Nov 24, 2010 at 18:28
  • Ok. I'm interested to hear what the problem is too. :)
    – cdhowie
    Commented Nov 24, 2010 at 18:29
  • 1
    So, the issue was with naming the public SSH key file. When I had originally created the file, I also renamed it, which caused issues in deploying as git would not connect properly and thus made heroku deployment a failure as well. To solve the problem, I generated a new public SSH key and added that to github prior to attempting again. It now connects! Thanks for your help!
    – vich
    Commented Nov 24, 2010 at 19:55
1

I had to do:

$ ssh-keygen -t rsa  
$ heroku keys:add  

Then it worked:

$ git push heroku master  
1

Check your .ssh config for heroku. Go to the .ssh folder and open the config file

cd ~/.ssh
subl config

The 'subl' is for Sublime Text, but you can use whatever editor you wish. Look for the line "IdentityFile" and make sure it has the non public key listed:

IdentityFile "/Users/ircmullaney/.ssh/my_ssh"

not

IdentityFile "/Users/ircmullaney/.ssh/my_ssh.pub"

That did it for me. I'm not sure why mine had the public version in the config file, but it did and it was throwing the error:

Permissions 0644 for '/Users/ircmullaney/.ssh/my_ssh.pub' are too open.
1

I was still having problems after trying all of these ideas. This was my problem:

My remote heroku repository was funked. I refreshed it as follows:

git remote -v

Then remove the heroku one that is wrong:

git remote rm heroku

Then add the new one

git remote add heroku [email protected]:sitename.git

You can get the sitename from your Heroku settings page for your app. Good Luck!

1

The problem I faced was on Windows and invariably whenever I run the "heroku keys:add" it selected the github keys. So here are the steps I followed to resolve the issue

  1. went to the .ssh directory under "Document and Settings" folder and deleted the git hub keys
  2. run the command heroku keys:add

The above command asked me to generate a new keys and following was the output Could not find an existing public key. Would you like to generate one? [Yn] Y Generating new SSH public key. Uploading SSH public key C:/Documents and Settings/Admin/.ssh/id_rsa.pub... done ! The 'heroku' gem has been deprecated and replaced with the Heroku Toolbelt, download and install from https://toolbelt.heroku.com.

  1. rerun the command heroku keys:add

The above command will not give the following output Found existing public key: C:/Documents and Settings/Admin/.ssh/id_rsa.pub Uploading SSH public key C:/Documents and Settings/Admin/.ssh/id_rsa.pub... done

  1. Now use the git push heroku master

for me using the above steps solved the issue and was able to deploy the application on the cloud.

1

I was experiencing the same problem; following these steps should help:

  1. First, log in: heroku login
  2. Clear all keys: heroku keys:clear
  3. Delete all files in local folder ( all .pub files and know_host) in .ssh/ folder
  4. Log in again : heroku login - u will prompt with no key, so follow the onscreen instructions.
2
  • Does not work to resolve the problem. I am logged in, successfully added keys, and still getting Permission denied (publickey).
    – JGallardo
    Commented Nov 9, 2013 at 7:56
  • Why do we need to delete all files in .ssh folder?
    – Starx
    Commented Feb 14, 2014 at 4:02
0

I would just to like to add that the directory is not necessarily C:\Users\[username]\.ssh. It is the directory in which you created your public key in.

For instance my home directory in Windows was changed to C:\[username]. Your home directory in a .ssh sub-folder is the best and most likely place you may have created your keys. You can check your home directory in Windows with the command:

    echo %HOMEPATH%
0

If you want to use "sudo", example:

sudo git clone [email protected]......... -o heroku

you should also generate ssh key for your root user.

sudo su
cd /root/.ssh  
ssh-keygen -t rsa
....
heroku keys:add id_rsa.pub

and it'll work.

if you don't use root user, generate ssh key in your user directory instead.

cd /home/user/.ssh

Sorry if my sentences messed up...

0

Try repairing permissions in Disk Utility (Mac OS X). Helped me

0

At first make sure hidden files are visible in your Mac. If not do:

  • Open terminal and type in defaults write com.apple.Finder AppleShowAllFiles TRUE
  • killall Finder

Next steps:

  • Going to Users/user_name/.ssh/ removed all the files.
  • Opening terminal type in ssh-keygen -t dsa
  • Then heroku keys:add ~/.ssh/id_dsa.pub

N.B. I did it in Mac OSX 10.7.2 Lion. Though the procedure should be same in others too.

0

I have this issue as well. I am using Mac OSX. The way I fixed that was to login as admin

sudo su

password

0

Solution of dmajkic help me at last:

For Windows users it may means: git client coudn’t find your keys. Check keys in c:\Users\UserName.ssh\ and! environment variable HOME=c:\Users\UserName\

0

Here is what worked for me. The heroku site is not being added to your known hosts. Go to window-other- show view-git-git repositories. From there clone the repository. Once you clone it, delete the repository that was just created and then import it from the file menu. Do this since when you clone the repository, it does not add it to the explorer view. Now you should have the git repository and the explorer view.

Not the answer you're looking for? Browse other questions tagged or ask your own question.