Like most sysadmins I use openssh all the time. I have about a dozen ssh keys, I like to have a different ssh key for each host. However this causes a problem when I am connecting to a host for the first time, and all I have is a password. I want to just connect to the host using a password, no ssh key in this case. However the ssh client will offer all the public keys in my ~/.ssh/
(I know this from looking at the output of ssh -v
). Since I have so many, I will get disconnected for too many authentication failures.
Is there some way to tell my ssh client to not offer all the ssh keys?
Although others have hinted at this with configuration-based solutions, it's probably worth pointing out that you can easily do this one-time-only on the command line with:
This is expected behaviour according to the man page of
ssh_config
:Basically, specifying
IdentityFile
s just adds keys to a current list the SSH agent already presented to the client.Try overriding this behaviour with this at the bottom of your
.ssh/config
file:You can also override this setting on the host level, e.g.:
Following James Sneeringer's solution, you might just want to set an ssh_config along the lines of:
If you connect with a particular key to many machines not in a common domain, consider giving them all CNAMEs in your own DNS. I do this with all customer systems.
Similar to user23413's solution, you can disable public key authentication altogether for a particular host (or wildcard pattern):
If you point to a particular key file with ssh -i /path/to/key it'll only use that one even if others are loaded into the agent, and you won't be prompted for the password. You can also edit you ~/.ssh/config and ad something like this...
Host foo.example.com
IdentityFile .ssh/id_rsa_foo.example.com
you can also do...
Host *.example.org
IdentityFile .ssh/id_rsa_example.org