Reputation: 11896
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.
Upvotes: 856
Views: 225729
Reputation: 1132
Here is the link that explains how to manage your ssh keys: https://devcenter.heroku.com/articles/keys#adding-keys-to-heroku
Upvotes: 61
Reputation: 18275
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 :
SO Answer on how to set Unix environment variable permanently
SO Question regarding ssh looking for keys in the wrong directory and a solution for the same.
Upvotes: 1483
Reputation: 431
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]
Upvotes: 92
Reputation: 6047
Instead of dealing with SSH keys, you can also try Heroku's new beta HTTP Git support. It just uses your API token and runs on port 443, so no SSH keys or port 22 to mess with.
To use HTTP Git, first make sure Toolbelt is updated and that your credentials are current:
$ heroku update
$ heroku login
(this is important because Heroku HTTP Git authenticates in a slightly different way than the rest of Toolbelt)
During the beta, you get HTTP by passing the --http-git
flag to the relevant heroku apps:create
, heroku git:clone
and heroku git:remote
commands. To create a new app and have it be configured with a HTTP Git remote, run this:
$ heroku apps:create --http-git
To change an existing app from SSH to HTTP Git, simply run this command from the app’s directory on your machine:
$ heroku git:remote --http-git
Git remote heroku updated
Check out the Dev Center documentation for details on how set up HTTP Git for Heroku.
Upvotes: 0
Reputation: 8413
If the other answers didn't worked for you. Try this!
Sometimes all you need is to push again. It happen to me today due to slow internet connection(when you are downloading or using p2p).
Please see screenshot below:
Upvotes: 0
Reputation: 1257
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
Upvotes: 148
Reputation: 2396
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.
Upvotes: 2
Reputation: 9850
when pushing using
git push heroku production:master
your public key under home directory ~/.ssh/id_rsa is used
To fix this
you should login as a different user may be root
sudo su
then start fresh by issuing the following commands
heroku keys:clear //removes existing keys
ssh-keygen -t rsa //generates a new key in ~/.ssh folder (set a password)
heroku keys:add //uploads the new key, ~/.ssh/id_rsa is uploaded
git push heroku production:master
Upvotes: 0
Reputation: 106
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.
Upvotes: 0
Reputation: 3548
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.
Upvotes: 3
Reputation: 18030
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\
Upvotes: 0
Reputation: 11504
I have this issue as well. I am using Mac OSX. The way I fixed that was to login as admin
sudo su
password
Upvotes: 0
Reputation: 2778
At first make sure hidden files are visible in your Mac. If not do:
defaults write com.apple.Finder
AppleShowAllFiles TRUE
killall Finder
Next steps:
Users/user_name/.ssh/
removed all the files.ssh-keygen -t dsa
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.
Upvotes: 0
Reputation: 317
I was experiencing the same problem; following these steps should help:
.pub
files and know_host
) in .ssh/ folder
Upvotes: 1
Reputation: 11
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
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.
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
for me using the above steps solved the issue and was able to deploy the application on the cloud.
Upvotes: 1
Reputation: 950
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!
Upvotes: 1
Reputation: 6794
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:
before freaking out too hard.
Upvotes: 4
Reputation: 2227
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.
Upvotes: 1
Reputation: 91
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!
Upvotes: 5
Reputation: 345
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.
Upvotes: 10
Reputation: 41123
One single command works:
heroku keys:add
It will make one if it doesn't exist.
Upvotes: 5
Reputation: 2301
I had to do:
$ ssh-keygen -t rsa
$ heroku keys:add
Then it worked:
$ git push heroku master
Upvotes: 1
Reputation: 13388
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.
Upvotes: 15
Reputation: 1175
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...
Upvotes: 0
Reputation: 3852
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
Upvotes: 36
Reputation: 6967
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)
Upvotes: 7
Reputation: 78
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%
Upvotes: 0