This means, on your local machine, you haven't made any SSH keys. Not to worry. Here's how to fix:
- Open git bash (Use the Windows search. To find it, type "git bash") or the Mac Terminal. Pro Tip: You can use any
*nix
based command prompt (but not the default Windows Command Prompt!) - Type
cd ~/.ssh
. This will take you to the root directory for Git (LikelyC:\Users\[YOUR-USER-NAME]\.ssh\
on Windows) - Within the
.ssh
folder, there should be these two files:id_rsa
andid_rsa.pub
. These are the files that tell your computer how to communicate with GitHub, BitBucket, or any other Git based service. Typels
to see a directory listing. If those two files don't show up, proceed to the next step. NOTE: Your SSH keys must be namedid_rsa
andid_rsa.pub
in order for Git, GitHub, and BitBucket to recognize them by default. - To create the SSH keys, type
ssh-keygen -t rsa -C "your_email@example.com"
. This will create bothid_rsa
andid_rsa.pub
files. - Now, go and open
id_rsa.pub
in your favorite text editor (you can do this via Windows Explorer or the OSX Finder if you like, typingopen .
will open the folder). - Copy the contents--exactly as it appears, with no extra spaces or lines--of
id_rsa.pub
and paste it into GitHub and/or BitBucket under the Account Settings > SSH Keys. NOTE: I like to give the SSH key a descriptive name, usually with the name of the workstation I'm on along with the date. - Now that you've added your public key to Github and/or BitBucket, try to
git push
again and see if it works. It should!
More help available from GitHub on creating SSH Keys and BitBucket Help.
Bravo!! I was getting the
Permission Denied (publickey)
error when trying to executenpm run deploy
to publish an app to gh-pages for the first time. Kept going in circles on different forums without much luck. One suggestion was to change the remote's URL from SSH to HTTPS - which I tried, and it worked ONCE (published to gh-pages successfully) - and then some time later I tried to publish new changes and it failed with the same error as before. Such a headache, but the solution described here worked like a charm after I switched my remote URL back to SSH and followed the steps. Thank you so much! :)