bash: /home/user/.ssh/authorized_keys: No such file or directory

Create a ssh key:
Command:

ssh-keygen -t rsa –P ""

Moving the key to authorized key:
Command:

cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
bash: /home/user/.ssh/authorized_keys: No such file or directory

Solution 1:

You have to create the .ssh directory and the authorized_keys file the first time.

  1. Create the .ssh directory:

    mkdir ~/.ssh
    
  2. Set the right permissions:

    chmod 700 ~/.ssh
    
  3. Create the authorized_keys file:

    touch ~/.ssh/authorized_keys
    
  4. Set the right permissions:

    chmod 600 ~/.ssh/authorized_keys
    

The permissions are important! It won't work without the right permissions!

Now you can add the public key to the authorized_keys file:

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

You have to add the public key of your computer to the authorized_keys file of the computer you want to access using SSH Keys!


As terdon mentioned you can also just use this command:

ssh-copy-id user@host

This will put your id_rsa.pub (in your ~/.ssh directory) in the remote computer's authorized_keys file, creating the .ssh directory and authorized_keys file with the right permissions if necessary.

Solution 2:

Since I don't have enough reputation, I'm adding this here. In addition to Louis Matthijssen's answer if you are still not able to login through ssh as a user that you've created, like

ssh username@host

then this may be because of the absence of owner permission that you must add to your /home/username/.ssh folder. I had the same issue and you can give this permission as:

chown -R username:username /home/username/.ssh

This can probably happen simply because you were creating the directory and setting the permissions as root, but not as the username you want to access the server with.

Hope this helps someone.