Ubuntu – SSH without password with non-default identity file location

command linepasswordserverssh

As part of a startup script I have to automatically open several gnome-terminal windows, one of those terminals automatically send:

ssh user@192.168.1.3

The limitation with this is that I still need to type a password to complete the SSH connection.

What I want to do is for my script to initiate the command and complete the connection. To that extent, I attempted to follow the instructions as outlined in the accepted answer here.

From the system I wish to connect from, I ran:

ssh-keygen
Enter file in which to save the key: /home/user/ssh/keys/server1key

It then prompted me to enter a passphrase. I left this empty, as I wasn't sure what it would be for, so I assumed setting one would require unlocking it with said passphrase each time I'd use it.

Continuing with the instructions linked above, I then ran and received the following:

ssh-copy-id user@IP
ERROR: No identities found

A quick search revealed that I needed to specify the location of the key, as it was not in the default save location, so I fixed that:

ssh-copy-id -i /home/user/ssh/keys/server1key.pub user@192.168.1.3

After asking for the server's password, it successfully added the key. However, upon attempting to log in with "ssh user@IP", I was still prompted for the password.

As far as I'm aware, I followed the linked instructions correctly, so either I'm missing something, or perhaps an existing configuration is preventing me for getting this to work?

Both systems use 18.04 and openssh.

Best Answer

It fails for the same reason that ssh-copy-id failed the first time - i.e. because you have chosen a non-default location for the identity file.

You can resolve it in the same way, by adding -i /home/user/ssh/keys/server1key to your ssh command - note that the client side needs the location of the private key file.

From man ssh

 -i identity_file
         Selects a file from which the identity (private key) for public
         key authentication is read.  The default is ~/.ssh/identity for
         protocol version 1, and ~/.ssh/id_dsa, ~/.ssh/id_ecdsa,
         ~/.ssh/id_ed25519 and ~/.ssh/id_rsa for protocol version 2.

Alternatively, you may wish to create a ~/.ssh/config file entry for the host along the lines of

Host            somename
Hostname        192.168.1.3
User            user
IdentityFile    /home/user/ssh/keys/server1key
Related Question