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.