Error: Permission denied (publickey)
Should the sudo command be used with Git?
You should not be using the
sudo command with Git. If you have a very good reason you must use
sudo, then ensure you are using it with every command (it's probably just better to use
su to get a shell as root at that point). If you generate SSH keys without
sudo and then try to use a command like
sudo git push, you won't be using the same keys that you generated.
Check that you are connecting to the correct server
Typing is hard, we all know it. Pay attention to what you type; you won't be able to connect to "githib.com" or "guthub.com". In some cases, a corporate network may cause issues resolving the DNS record as well.
To make sure you are connecting to the right domain, you can enter the following command:
$ ssh -vT email@example.com # OpenSSH_5.6p1, OpenSSL 0.9.8r 8 Feb 2011 # debug1: Reading configuration data /Users/you/.ssh/config # debug1: Reading configuration data /etc/ssh_config # debug1: Applying options for * # debug1: Connecting to github.com [188.8.131.52] port 22.
Always use the "git" user
All connections must be made as the "git" user. If you try to connect with your GitHub username, it will fail:
$ ssh -T firstname.lastname@example.org # Permission denied (publickey).
Instead, you should verify your connection by typing:
$ ssh -T email@example.com # Hi username! You've successfully authenticated...
Make sure you have a key that is being used
Open the terminal.
Verify that you have a private key generated and loaded into SSH:
# start the ssh-agent in the background eval "$(ssh-agent -s)" # Agent pid 59566 ssh-add -l # 2048 a0:dd:42:3c:5a:9d:e4:2a:21:52:4e:78:07:6e:c8:4d /Users/you/.ssh/id_rsa (RSA)
The ssh-add command should print out a long string of numbers and letters. If it does not print anything, you will need to generate a new SSH key and associate it with GitHub.
On most systems the default private keys (
~/.ssh/identity) are automatically added to the SSH authentication agent. You shouldn't need to run
ssh-add path/to/keyunless you override the file name when you generate a key.
Getting more details
You can also check that the key is being used by trying to connect to firstname.lastname@example.org:
$ ssh -vT email@example.com # ... # debug1: identity file /Users/you/.ssh/id_rsa type -1 # debug1: identity file /Users/you/.ssh/id_rsa-cert type -1 # debug1: identity file /Users/you/.ssh/id_dsa type -1 # debug1: identity file /Users/you/.ssh/id_dsa-cert type -1 # ... # debug1: Authentications that can continue: publickey # debug1: Next authentication method: publickey # debug1: Trying private key: /Users/you/.ssh/id_rsa # debug1: Trying private key: /Users/you/.ssh/id_dsa # debug1: No more authentication methods to try. # Permission denied (publickey).
In that example, we did not have any keys for SSH to use. The "-1" at the end of the "identity file" lines means SSH couldn't find a file to use. Later on, the "Trying private key" lines also indicate that no file was found. If a file existed, those lines would be "1" and "Offering public key", respectively:
$ ssh -vT firstname.lastname@example.org # ... # debug1: identity file /Users/you/.ssh/id_rsa type 1 # ... # debug1: Authentications that can continue: publickey # debug1: Next authentication method: publickey # debug1: Offering RSA public key: /Users/you/.ssh/id_rsa
Verify the public key is attached to your account
You must provide your public key to GitHub to establish a secure connection.
Start SSH agent in the background.
$ eval "$(ssh-agent -s)" # Agent pid 59566
ssh-add -land take note of the resulting fingerprint:
$ ssh-add -l # 2048 a0:dd:42:3c:5a:9d:e4:2a:21:52:4e:78:07:6e:c8:4d /Users/USERNAME/.ssh/id_rsa (RSA)
In the top right corner of any page, click your profile photo, then click Settings.
In the user settings sidebar, click SSH keys.
- Compare the list of SSH keys with the output from
Make sure your .ssh directory and its files have the correct permissions:
- The SSH directory needs 700 permissions:
$ chmod 700 ~/.ssh
- Your private key
id_rsaneeds 600 permissions:
$ chmod 600 ~/.ssh/id_rsa
- The files
known_hostsand public key
id_rsa.pubneed 644 permissions:
$ chmod 644 ~/.ssh/authorized_keys ~/.ssh/known_hosts ~/.ssh/id_rsa.pub