How can I force ssh to accept a new host fingerprint from the command line?
Solution 1:
The answers here are terrible advice. You should never turn off StrictHostKeyChecking in any real-world system (e.g. it's probably okay if you're just playing on your own local home network – but for anything else don't do it).
Instead use:
ssh-keygen -R hostname
That will force the known_hosts
file to be updated to remove the old key for just the one server that has updated its key.
Then when you use:
ssh user@hostname
It will ask you to confirm the fingerprint – as it would for any other "new" (i.e. previously unseen) server.
Solution 2:
Here's how to tell your client to trust the key. A better approach is to give it the key in advance, which I've described in the second paragraph. This is for an OpenSSH client on Unix, so I hope it's relevant to your situation.
You can set the StrictHostKeyChecking
parameter. It has options yes
, no
, and ask
. The default is ask
. To set it system wide, edit /etc/ssh/ssh_config
; to set it just for you, edit ~/.ssh/config
; and to set it for a single command, give the option on the command line, e.g.
ssh -o "StrictHostKeyChecking no" hostname
An alternative approach if you have access to the host keys for the remote system is to add them to your known_hosts
file in advance, so that SSH knows about them and won't ask the question. If this is possible, it's better from a security point of view. After all, the warning might be right and you really might be subject to a man-in-the-middle attack.
For instance, here's a script that will retrieve the key and add it to your known_hosts file:
ssh -o 'StrictHostKeyChecking no' hostname cat /etc/ssh/ssh_host_dsa_key.pub >>~/.ssh/known_hosts