SSH without password with non-default identity file location

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

ssh [email protected]

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 [email protected]

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.


Solution 1:

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

Solution 2:

Another reason that ssh-copy-id fails is that the key hasn't been added to the SSH agent.

First, check and start if ssh-agent is running:

eval "$(ssh-agent -s)"

If you get in process ID, you can add your key:

ssh-add -k /home/user/ssh/keys/server1key

With -k you add the key to the keychain.

Check if keys are added with:

ssh-add -l

ssh-copy-id should be working now.