Server keeps asking for password after I've copied my SSH Public Key to authorized_keys
I have an Ubuntu Server, running in a Cloud.
I created a user (git
). In the folder /home/git
, I have created the .ssh/
dir, and the authorized_keys
file.
But, when I put my SSH Public Key in the authorized_keys
file, the server continues to ask me the password.
What did I do wrong?
On the server side, the ssh daemon will log errors in /var/log/auth.log
, so check that file to see what's being reported.
From the client side, when establishing the connection you can add the -v
flag (or -vv
or -vvv
) to increase verbosity. You might be able to identify your problem this way.
Here are other things to check.
- Make sure
/home/git/.ssh/authorized_keys
is owned bygit
. - Make sure
/home/git/.ssh/authorized_keys
has a mode of 600 (-rw-------
).
Also check the /etc/ssh/sshd_config
file.
-
PubkeyAuthentication
should be set toyes
- There is also the
AuthorizedKeysFile
directive which determines the path where the authorized keys should be located. Ensure it's commented out or on the default of%h/.ssh/authorized_keys
.
Also make sure your user home directory (in your case, /home/git) is only writable by you. I had this issue once because my home directory was group-writable. /var/log/auth.log said in it: "Authentication refused: bad ownership or modes for directory /home/chuck". (this is to make sure it doesn't use an authorized_keys file that someone other than you has been messing around with!)
There are different ways to solve this: you can configure either sshd
(server-side) or ssh
(client-side) not to use password authentication. Disabling password authentication on the server makes your server more secure, but you will be in trouble if you loose your key.
To make ssh
(client-side) using pubkey authentication, add some options to the ssh
command:
ssh -o PubkeyAuthentication=yes -o PasswordAuthentication=no -X git@server
If this works, you can set the PasswordAuthentication=no
option permanently in the ssh client config file /etc/ssh/ssh_config
system-wide or ~/.ssh/config
user-specific (on details, see man ssh_config
).